检查字符串中的唯一字符 (java)

Check for Unique character in a string (java)

public static boolean uniqueCheck(String s)
{
    int checker=0,val=0;
    for (int i = 0; i < s.length(); i++) {
        val=s.charAt(i)-'a';
        if ((checker & (1<< val))>0) return false;
        checker |= (1<<val);
    }
    return true;
}

我想知道此代码如何忽略 space( ) 和 return true 的唯一字符。 例如:"a b c d" return 正确。但是 space 也有 Unicode 值,当它遇到 space 2 次时它应该 return false。为什么不呢??

因为1 << (' ' - 'a')是负数,所以bitmask提取出来的int:

(checker & (1 << val))

也是负数。

将条件更改为

if ((checker & (1<< val)) != 0) return false;
                       // ^^ Here.

但是:您只有 32 位可用于指示先前检测到的 char,并且 val 有 65536 个可能值:对于其他方法,此方法将很快失败字符串。

例如,该方法会声称"Aa""R2"" @"(space后跟at符号)有重复字符,这显然是错误的.

由于 ASCII 代码点的排列,这 碰巧 "a b c d" 工作 - space 恰好不与任何其他符号冲突在字符串中,模 32.

您应该使用 replaceAll() 替换 string 中的所有空格(或您指定的任何其他字符)。