【问题标题】:First non-repeating character in a stream流中的第一个非重复字符
【发布时间】:2017-05-09 23:36:12
【问题描述】:

我对这个问题的回答如下,但我想知道我是否可以使用这段代码以及复杂度是多少:

import java.util.LinkedHashMap;
import java.util.Map.Entry;

public class FirstNonRepeatingCharacterinAString {

    private char firstNonRepeatingCharacter(String str) {       
        LinkedHashMap<Character, Integer> hash =
                new LinkedHashMap<Character, Integer>();

        for(int i = 0 ; i< str.length() ; i++)
        {
            if(hash.get(str.charAt(i))==null)
                hash.put(str.charAt(i), 1);
            else
                hash.put(str.charAt(i), hash.get(str.charAt(i))+1);
        }

        System.out.println(hash.toString());

        for(Entry<Character, Integer> c : hash.entrySet())
        {
            if(c.getValue() == 1)
                return c.getKey();
        }

        return 0 ;
    }

    public static void main(String args[])
    {
        String str = "geeksforgeeks";
        FirstNonRepeatingCharacterinAString obj =
                new FirstNonRepeatingCharacterinAString();
        char c = obj.firstNonRepeatingCharacter(str);
        System.out.println(c);
    }
}

【问题讨论】:

  • 我想知道我是否可以使用此代码。这是版权问题吗?
  • 这段代码的复杂度是 O(n)。但是您的代码似乎没有返回标题中提到的内容。
  • 我只是想知道,如果这个解决方案有效.. 这不是版权问题。

标签: java string algorithm data-structures


【解决方案1】:

您关于是否“可以使用此代码”的问题有点模棱两可 - 如果您编写了它,我认为您可以使用它:)

至于复杂度,它是O(n),其中nString 中的字符数。要计算出现次数,您必须遍历整个 String,并再次遍历它们以找到计数为 1 的第一个。在最坏的情况下,您没有不重复的字符,或者唯一不重复的字符是最后一个。无论哪种情况,您都必须再次遍历整个String。所以是O(n+n) = O(n)

编辑

顺便说一句,您的代码中有一个错误。因为您使用的是 insertion-order LinkedHashMap,所以每次调用 put(Character,Integer) 都会导致底层列表重新排序。您可能应该改用LinkedHashMap&lt;Character,int[]&gt;,并在放置之前检查是否存在键。如果它们存在,则只需增加存储在int[] 中的值,以避免通过再次调用put 来重新排序地图。即便如此,结果列表的顺序将与您对其进行迭代的方式相反,因此 first 非重复字符将是您在对其进行迭代时找到的最后一个其值为 1 的字符。或者, 你可以在你的第一个 for 循环中反向迭代,然后如果第一个非重复字符比原始 String 中的最后一个字符来得早,你就不必总是遍历整个 Entry 集合。

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多