我不确定此代码的工作原理:
public static boolean isUniqueChar2(String str) {
int checker = 0;
for (int i = 0; i < str.length(); ++i) {
int val = str.charAt(i) - 'a';
System.out.println(str.charAt(i) );
System.out.println(val);
if ((checker & (1 << val)) > 0)
return false;
checker |= (1 << val);
}
return true;
}
特别是我不明白特别的&gt;&gt;运算符和检查器的作用
答案 0 :(得分:4)
看起来此方法仅适用于小写字母。 checker
变量是初始化为所有0
的32位位图。代码1 << val
取1并将其移至val
的位置,该位置代表字母表中的字母(a = 0,b = 1,c = 2等)。 if ((checker & (1 << val)) > 0)
返回false
,因为0以外的任何值都表示重复了一封信。循环中的最后一行checker |= (1 << val);
在下一次迭代之前将位设置在位置val
。
答案 1 :(得分:0)
和|是按位移位和二进制或。我建议您阅读二进制和按位运算符:http://en.wikipedia.org/wiki/Bitwise_operation
a | = b只是a = a |的缩写b类似于a + = b到a = a + b