Niuke.com sword refers to offer-the first non-repeating character in the character stream

topic description

Please implement a function to find the first character that occurs only once in a character stream. For example, when only the first two characters "go" are read from the character stream, the first character that occurs only once is "g". When the first six characters "google" are read from this character stream, the first character that occurs only once is "l".

Output description:

If there is no one-occurring character in the current character stream, the # character is returned.


class Solution
{
public:
    //用一个大小为256的数组记录每个字符出现的状态,大于零表示出现一次,等于0表示还没出现,小于0表示出现一次以上
    //now来记录字符出现的名次
    //
  //Insert one char from stringstream
    void Insert(char ch)
    {
        if (pos[ch] == 0)
             pos[ch] = now++;
        else if (pos[ch] > 0)
            pos[ch] = -1;
    }
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        char ans = '#';
        int min = -1;
        for (int i = 0; i < 256; ++i)
        {
            if (pos[i] > 0)
            {
                if (min < 0)
                {
                    min = pos[i];
                    ans = i;
                }
                else if (pos[i] < min)
                {
                    min = pos[i];
                    ans = i;
                }
            }
        }
        return ans;
    }
private:
    int pos[256] = {0};
    int now = 1;
};

Guess you like

Origin blog.csdn.net/yhn19951008/article/details/79431006