class Solution {
/**
* 二进制左移几位就是后面加几个0,前面去掉几位
* 【39 << 2】 = 【0010 0111 << 2】 = 【1001 1100】
*
* 二级制右移几位就是在二进制的前面加几位(正数加0,负数加1),后面去掉几位
* 【39 >> 2】 = 【0010 0111 >> 2】 = 【0000 1001】
*
* 按位或:只要有一个数的对应位为1,结果的对应位就为1
* 按位与:只有两个数的对应位都为1时,结果的对应位才为1
* 按位异或:两个数对应位相同为0,不同为1
* @param astr
* @return
*/
public boolean isUnique(String astr) {
int mark = 0;
for (int i = 0; i < astr.length(); i++) {
// 获取当前字符距离 'a' 字符的偏移量,因为代码中假设字符串只包含小写字母。这个偏移量会在后面的操作中用于确定标记的位置
int moveBit = astr.charAt(i) - 'a';
if ((mark & (1 << moveBit)) != 0) {
return false;
} else {
// 如果当前字符没有出现过,则将 mark 的对应位置上的值设为1,表示当前字符已经出现过一次。
mark |= (1 << moveBit);
}
}
return true;
}
}