美文网首页
字符流中第一个不重复的字符

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

作者: hades2013 | 来源:发表于2018-10-09 15:53 被阅读0次

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

    方法一:

    class Solution {
    public:
        Solution(): index(0) {
            for (int i = 0; i < 256; ++i) {
                occurrence[i] = -1;
            }
        }
      //Insert one char from stringstream
        void Insert(char ch) {
            if (occurrence[ch] == -1) {
                occurrence[ch] = index;
            }
            else {
                occurrence[ch] = -2;
            }
            ++index;
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce() {
            char ch = '#';
            int minIndex = INT_MAX;
            for (int i = 0; i < 256; ++i) {
                if (occurrence[i] >= 0 && occurrence[i] < minIndex) {
                    minIndex = occurrence[i];
                    ch = i;
                }
            }
            return ch;
        }
    private:
        int occurrence[256];
        int index;
    };
    

    方法二:

    class Solution
    {
    public:
      //Insert one char from stringstream
        void Insert(char ch)
        {
            ++hashArray[ch-'\0'];
            if( hashArray[ch-'\0'] == 1){
                data.push_back(ch);
            }
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce()
        {
            while( !data.empty() && hashArray[data.front()] >= 2 ){
                data.pop_front();
            }
            if( data.empty() )
                return '#';
            return data.front();
        
        }
    
    private:
        unsigned char hashArray[128];
        deque<char> data;
    
    };
    

    相关文章

      网友评论

          本文标题:字符流中第一个不重复的字符

          本文链接:https://www.haomeiwen.com/subject/sqfyaftx.html