这个Java代码如何确定String是否包含所有唯一字符?

Ari*_*eem 2 java operators

我有一个我在网上找到的程序,基本上告诉我是否String包含所有唯一字符,下面是代码

private static boolean areCharsUnique(String str) {
        if (str.length() > 256)
            return false;
        int checker = 0;
        for (int i = 0; i < str.length(); i++) {
            int val = str.charAt(i) - 'a';
            if ((checker & (1 << val)) > 0) {
                return false;
            }
            checker |= (1 << val);
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

我被这行代码困惑if ((checker & (1 << val)) > 0),也

checker |= (1 << val);

我知道这<<是一个左移操作员,但在上述情况下左移的确切程度如何?

总之,上述计划如何运作?

Jac*_*ack 7

此代码的工作原理是ASCII字符集在其映射中具有连续字符a == 97, b == 98,以此类推.

从此开始,您可以计算a角色的增量距离,例如'e' - 'a' = 5.该距离用于设置(通过checker |= (1 << val))整数(具有32位)的位.

因此,如果'e'找到一个字符,则将索引5处的位设置为1 checker.

通过确保您永远不会找到之前已设置的位(通过if (checker & (1 << val)) > 0)),可以对每个字符进行此操作.

这仅适用于小写字符(即使因为int有32位).一个HashSet<Character>是肯定更好.