题目描述
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。如果你不使用额外的数据结构,会很加分。(力扣题.)
方法一:用HashSet或者数组
检验发现只可能出现小写a-z这么多字母,只需要一个26大小的布尔数组即可。
//用数组
public boolean isUnique1(String astr) {
boolean[] flag = new boolean[26];
for (int i = 0; i < 26; i++) {
flag[i] = false;
}
for (char c :
astr.toCharArray()) {
int num = c - 'a';
if(!flag[num])
flag[num] = true;
else
return false;
}
return true;
}
方法二:用位运算
进阶方法是不使用额外数据结构,那么我们可以用bit来代替方法一的布尔数组。我们只需要26bit的零一,就可以表示这个字母是否出现。最接近26bit的就是int类型了。
//位运算,用26 bit来代替上面的布尔数组
public boolean isUnique(String astr) {
int flag = 0;
for (char c :
astr.toCharArray()) {
int n = c - 'a';
if((flag & (1 << n)) != 0) {
return false;
}
else
flag |= (1 << n);
}
return true;
}