0

我不太确定这段代码是如何工作的:

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

特别是我不了解特定的 >> 运算符和检查器的作用

4

2 回答 2

4

看起来这种方法仅适用于小写字母。该变量是初始化为所有schecker的 32 位位图。0该代码1 << val采用 1 并将其移动到 的位置val,它表示字母表中的一个字母(a=0、b=1、c=2 等)。 if ((checker & (1 << val)) > 0)返回false,因为 0 以外的任何值都表示一个字母被重复了。循环中的最后一行,checker |= (1 << val);将位设置val在下一次迭代之前的位置。

于 2012-12-21T00:02:15.150 回答
0

和 | 是按位移位和二进制或。我建议您阅读二进制和位运算符:http ://en.wikipedia.org/wiki/Bitwise_operation

a |= b 只是 a = a | 的简写。b 类似于 a += b 到 a = a + b

于 2012-12-20T23:55:37.753 回答