字符流中第一个不重复的字符

题目描述

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

解题思路

凡是这种出现一次的题都要新开一个HashMap用来记录每一个字符出现的次数,但是HashMap是无序的,所以还需要一个有序数组ArrayList来存储字符出现的先后顺序,再对其进行遍历,找出第一个出现次数为1次的字符。

代码

public Class Solution{
    HashMap<Character,Integer> map = new HashMap<>();
    ArrayList<Character> list= new ArrayList<>();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        if (!map.containsKey(ch)) {
            map.put(ch,1);
            list.add(ch);
        }
        else map.put(ch,map.get(ch)+1);

    }
    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        for (char c:list){
            if (map.get(c) == 1) return c;
        }
        return '#';
    }

    public static void main(String[] args) {
        String s = "google";
        Solution solution= new Solution();
        for (char c : s.toCharArray()){
            solution.Insert(c);
        }
        System.out.println(solution.FirstAppearingOnce());


    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。