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

标签 java algorithm

<分区>

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

方法一。

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];
    }
}

方法二。

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];
    }
}

首先有没有更好的解决办法? (时间和空间复杂度的术语)? 如果不是以上哪一个更好?我不确定 hashmap 的空间复杂度!

最佳答案

怎么样

第一个重复字符。

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 循环使其更清晰。

关于java - 算法:在输入字符串中查找第一个非重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168747/

相关文章:

java - 如何简化 token 预测 DFA?

algorithm - 确定 Int 是否为 Haskell 中的完美正方形的方法是什么?

algorithm - 有人可以解释一下这段代码中模数的使用吗?

arrays - 将二叉树展平为数组 : Is there a way to find a node's index in the array when traversing depth-first?

java - 将 Scanner 与自定义分隔符结合使用会跳过尾随的空标记

java - 如何判断一个对象是同一个还是不同的

java - Spring安全和Spring引导

java - java集合中的entryset vs keyset

c - 最大共线点数 - 优化

algorithm - 什么是桶或双桶数据结构?