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

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

代码:

class Solution
{
public:
    vector<char> q;
    int sign[255]={0};
  //Insert one char from stringstream
    void Insert(char ch)
    {
        q.push_back(ch);
    }
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        if(!sign[ q.back() ])
            sign[ q.back() ] ++;
        else
            sign[ q.back() ] ++;
        for (int i = 0; i < q.size(); i ++){
            if(sign[ q[i] ] == 1)
                return q[i];
        }
        return '#';
    }
};

我的笔记:在类中定义两个公有变量,char类型可变数组q 和 整型数组sign用0填充。首先将每个字符流元素push_back到q数组中,并以q数组中的元素ascii码为位置记录在sign数组中,每出现一次便是其自加,最后循环判断数组中第一个值为1的元素并将其输出。

posted @ 2020-05-15 14:03  John_yan15  阅读(132)  评论(0)    收藏  举报