算法:在输入字符串中查找第一个非重复字符

时间:2013-10-03 20:33:11

标签: java algorithm

我看到了thisthis的问题,但我的不同。我想在java中为它编写一个高效的代码。我想出了两个解决方案:

方法1。

find_first_reapeted(char[] input)
{
    HashMap<Character,Integer> myhash = new HashMap<Character,Integer> ();
    for(int i=0;i<input.length;i++)
    {
      if(myhash.containsKey(input[i])
          myhash.put(input[i],2); //just put 2 even if it is more than 2
      else
          myhash.put(input[i],1);
    }
    for(int i=0;i<input.length;i++)
    {
      if(myhash.getValue(input[i])==1)
         return input[i];
    }
}

方法2。

find_first_reapeted(char[] input)
{
    int[] allchars = new int[26];
    for(int i=0;i<input.length;i++)
    {
        allchars[input[i]-'a'] += 1;
    }
    for(int i=0;i<input.length;i++)
    {
      if(allchars[input[i]-'a']==1)
         return input[i];
    }
}

首先是有更好的解决方案吗? (int时间和空间复杂度)? 如果没有上述哪一个更好?我不确定hashmap的空间复杂性!

1 个答案:

答案 0 :(得分:3)

怎么样

第一个重复的角色。

char find_first_repeated(char[] input) {
    BitSet bs = new BitSet();
    for(char c : input) {
        if(bs.get(c))
           return c;
        bs.set(c);
    }
    return '\uffff'; // invalid char
}

第一个非重复字符,我会使用第二种方法,但使用for-each循环使其更清晰。