判断字符是否唯一

2020-02-28

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1

输入: s = "leetcode"
输出: false

示例 2

输入: s = "abc"
输出: true

首先我们可能会想到用两层循环来写但是那可能会超时,但是我们有更聪明的写法,就是声明一个数组来存这个出现了多少次,当这个出现的次数大于 1 的时候就说明不是一个正确的案例

下面给出 Go 代码

func isUnique(astr string) bool {
	var chars [256]int
	for _, as := range astr {
		chars[byte(as)]++
		if chars[byte(as)] > 1 {
			return false
		}
	}
	return true
}

还有一种就是位运算利用一个 int(可以开 int64 位的变量) 假如是 mark 变量(000000000…)利用每一位上的二进制来模拟字符是否出现过,如果没出现过,那么我们将1 <<( 字符与'a'的差值) | mark赋值给 mark,来表示这个字符出现过。这样的做法会更省空间,就不用开一个数组来存字符出现的个数

下面给出 Go 的代码

func isUnique(astr string) bool {
	mark := 0
	for _, as := range astr {
		if 1<<(as-'a')&mark == 0 {
			mark |= 1 << (as - 'a')
		} else {
			return false
		}
	}
	return true
}

当然也可以用 C/C++来写,这里我就不演示了。

算法Leetcode

CaddyServer搭建web服务器

Docker基础