剑指offer 51. 字符流中第一个不重复的字符

  1. 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
  2. 思路:
    1. 使用map直接统计字符流出现的字符次数
  3. 启发或者坑:
    1. 遍历字符串,找到字符次数为1的字符;不能遍历map,因为map中字符出现一次,但不一定是第一次出现的
  4. 代码:
    class Solution
    {
    public:
        map<char, int> mark;
        string strStream = "";
      //Insert one char from stringstream
        void Insert(char ch)
        {
            strStream += ch;
            map<char, int>::iterator it;
            it = mark.find(ch);
            if (it == mark.end()) {
                mark.insert(make_pair(ch, 1));
            } else {
                mark[ch]++;
            }
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce()
        {
            for (int i = 0; i < strStream.size(); i++) {
                if (mark[strStream[i]] == 1)
                    return strStream[i];
            }
            return '#';
        }
    };
发布了131 篇原创文章 · 获赞 5 · 访问量 7368

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104093632