判定英文单词中所有的字符是否全都不同

大家常想到的方法就是构建一个布尔值的数组,索引 i 对应该字符串的第 i 个字符。若这个字符出现第二次,则立即返回 false 。

下面我们来介绍一种利用位向量(bit vector)来解决的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 判断字符串中的字符是否有重复(字符串只包含a-z)
* @param str String
* @return boolean
*/
public static boolean isUniqueChars(String str){
if(str.length() > 26)
return false;
int checker = 0;
for(int i=0; i < str.length(); i++){
int val = str.charAt(i) - 'a';
if( (checker & (1<<val)) > 0)
return false;
checker |= (1 << val );
}
return true;
}

checker 用二进制来表示,每一位就代表一个英文字母,最多26位。

欢迎关注我的其它发布渠道