实现一个算法,确定一个字符串 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++来写,这里我就不演示了。