大家常想到的方法就是构建一个布尔值的数组,索引 i 对应该字符串的第 i 个字符。若这个字符出现第二次,则立即返回 false 。
下面我们来介绍一种利用位向量(bit vector)来解决的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
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位。