我很难理解此代码,该代码可检测字符串中的重复项。
int checker = 0;
for(char ch : seed.toCharArray()){
int val = ch - 'a';
System.out.println(val);
if ((checker & (1 << val)) > 0){
// duplicate found
break;
}
checker |= (1 << val);
}
有人可以用一个例子解释一下它是如何工作的吗?
确定,例如ch = 'c'
:
int val = 'c' - 'a' = 2; //The char value for 'c' is two greater that that for 'a'
然后评估if
条件:
1 << 2
是指“将1向左移动两个位置”,即为二进制100,即十进制4。
checker & 4
表示检查器之间的“按位与”,即检查是否已设置该特定位。
如果设置了该位,则完成,否则执行
c |= 4
这意味着“ c = c | 4”,这是按位的,或者会将与'c'相对应的位设置为1。
[似乎它使用checker
作为位图:'a'的位0,'b'的位1,等等。它检查是否已设置字母(checker & (1 << val)) > 0
,如果不是,则检查设置为checker |= (1 << val)
以这种方式我们为什么要这样做,有人可以澄清一下吗?1.ch-'a';没有这个,我们也可以做?2.此方法有局限性..如果您将输入字符串指定为“ aA”,则表示重复。