[使用移位运算符java检测字符串中的重复项

问题描述 投票:3回答:3

我很难理解此代码,该代码可检测字符串中的重复项。

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);
    }

有人可以用一个例子解释一下它是如何工作的吗?

java bit-shift shift
3个回答
3
投票

确定,例如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。


0
投票

[似乎它使用checker作为位图:'a'的位0,'b'的位1,等等。它检查是否已设置字母(checker & (1 << val)) > 0,如果不是,则检查设置为checker |= (1 << val)


0
投票

以这种方式我们为什么要这样做,有人可以澄清一下吗?1.ch-'a';没有这个,我们也可以做?2.此方法有局限性..如果您将输入字符串指定为“ aA”,则表示重复。

© www.soinside.com 2019 - 2024. All rights reserved.