位向量法:
位运算符号:
& 与
| 或
^ 异或
~ 取反
<< 左移(乘),右补0
>> 右移(除),正数左补0,负数左补1
class Solution {
public:
bool isUnique(string astr) {
int checker = 0;
for(int i=0;i<astr.size();i++){
int val = astr[i] - 'a';
if((checker & (1<<val))>0){
return false;
}
checker |= (1<<val);
}
return true;
}
};
checker的每一位代表的是一个字母,通过val计算出字符与’a’的距离,获得它应该对应的位。
1<<val使得只有字符那一位为1。
checker & (1<<val)是为了检查当前字符是否在之前出现过。
checker |= (1<<val):记录当前字符出现过。