面试题50_II_字符流中第一个只出现一次的字符

题目描述

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

题解

和上一题一样,一样可以使用哈希表来保存每个字符出现的次数,但由于HashMap是无序的,无法记录输入字符流的顺序,因此使用LinkedHashMap。

时间复杂度为O(n),空间复杂度为O(1)。

LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();

public void Insert(char ch)
{
    if (!map.containsKey(ch))
        map.put(ch, 1);
    else map.put(ch, map.get(ch)+1);
}

public char FirstAppearingOnce()
{
    for (char ch : map.keySet()) {
        if (map.get(ch) == 1)
            return ch;
    }
    return '#';
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容