查找字符串是否唯一

时间:2014-05-10 02:26:20

标签: java string hashtable

我想使用哈希表来查找唯一字符,因为它对我来说似乎更有效,例如,哈希表中的hello将是=> {h:1,e:1,l:2,o:1}&因为value大于1,所以string不是唯一的。我知道我可以用ascii方式计算唯一字符但我想实现哈希表方式。

请注意,我不想要正则表达式实现。

static void findHashUnique(String str)
{
    Hashtable<Character, Integer> ht = new Hashtable<Character, Integer>();
    for(int i=0;i<str.length();i++)
    {
        int cnt=1;

        if(!ht.containsKey(str.charAt(i)))
        {
            ht.put(str.charAt(i), cnt);
        }
    }
    System.out.print(ht);
}

我陷入困境,我将如何首先初始化哈希表&amp;还检查值是否存在然后递增。如果是&#39; l&#39;由于密钥相同,它将增加到2而不是1。 这个解决方案也有效吗?

3 个答案:

答案 0 :(得分:2)

这是我的方法。

String string = "hello";
Hashtable<Character, Integer> map = new Hashtable<>();
for (int i = 0; i < string.length(); i++) {
   char c = string.charAt(i);
   if (map.containsKey(c)) {
      map.put(c, map.get(c) + 1);
   } else {
      map.put(c, 1);
   }
}
System.out.println(map);

输出:{e=1, o=1, l=2, h=1}

答案 1 :(得分:2)

好吧,我不确切知道您要检查的字符编码,但如果您只限制自己的ASCII字符,则可以使用128个元素的简单数组。

public static String uniqueLetters(String s) {
   // storage for ascii characters
   char[] letters = new char[128];

   // mark counts of all letters
   for(int i = 0; i < s.length(); i++) {
      letters[ (int)s.charAt(i) ]++;
   }

   // find unique letters
   String uniques = "";
   for(int i = 0; i < letters.length; i++) {
      if ( letters[i] == 1 ) {
         uniques += Character.toString( (char)letters[i] );
      }
   }

   return uniques;
}

答案 2 :(得分:0)

To&#34; fix&#34;您的代码使用HashSet<Character>,内部使用Hashtable,但您不必知道或担心这一点。只需继续将字符添加到集合中,您将在最后留下一组唯一的字符。

更轻松地实现意图

String uniqueChars = str.replaceAll("(.)(?=.*\\1)", "");