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

题目描述

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

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

代码

class Solution
{
private:
    int cnt[256];
    int inx[256];
    int i = 0;
public:
    //Insert one char from stringstream
    void Insert(char ch)
    {
        if (i == 0) {
            memset(cnt, 0, sizeof(cnt));
            memset(inx, 0, sizeof(inx));
        }
        ++cnt[ch];
        inx[ch] = ++i;
    }
    //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        int k = 0x3fffffff;
        char ans = '#';
        for (int j = 0; j < 256; ++j) {
            if (cnt[j] == 1 && k > inx[j]) {
                k = inx[j];
                ans = j;
            }
        }
        return ans;
    }
};

posted on 2017-03-22 19:38  jec  阅读(74)  评论(0编辑  收藏  举报

导航