【问题标题】:Check for Unique character in a string (java)检查字符串中的唯一字符(java)
【发布时间】:2017-12-04 02:27:01
【问题描述】:
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;
}

我想知道这段代码将如何忽略空格()并为唯一字符返回 true。 例如:"a b c d" 返回 true。但是空格也有Unicode值,当它遇到空格2次时它应该返回false。为什么不呢??

【问题讨论】:

  • 您应该更好地描述您想要实现的目标。代码对aa 是正确的,但对于` `(两个空格)失败,因为s.charAt(i)-'a' 是否定的,为什么你的if-statement 会失败。

标签: java string unicode logic logical-operators


【解决方案1】:

因为1 &lt;&lt; (' ' - 'a')是负数,所以位掩码提取的int:

(checker & (1 << val))

也是负数。

将条件改为

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

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

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

这只是发生适用于 "a b c d",因为 ASCII 代码点的排列 - 空格恰好不会与字符串中的任何其他符号发生冲突,模 32。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2017-04-15
      • 2011-12-09
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多