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

题目描述

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

输出描述:

如果当前字符流没有存在出现一次的字符,返回#字符。

本题错误的地方:1、字符串末尾插入一个char字符;string.push_back().append(),操作的都是字符串类型,不能操作char,要想实现插入char类型,
使用insert,string.insert(position,number,target),position代表插入的字符位置,number是插入的个数,target代表插入的字符char。
2、使用unordered_map需要注意,下标操作时,map[i]得到的结果就是value值,不要写成map[i] -> second,只有iteration迭代器操作才使用first,second。

3、题目要求第一次出现的字符,所以每次找到字符之后都必须要将查找位置置为初始位置。
class Solution
{
public:
  //Insert one char from stringstream
    void Insert(char ch){       
         s.insert(s.size(),1,ch);
         ++hashMap[ch];
    }
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce(){
        for(int i = 0;i < s.size();++i){
            if(hashMap[s[i]] == 1){
                char tmp = s[i];
                i = 0;
                return tmp;
            }
        }
        return '#';
    }
private:
    string s;
    unordered_map<char,int> hashMap;
};

 private必须是class里面的成员函数可以直接访问,或者友元函数可以直接访问。








原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7508852.html