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

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

作者: 李伟13 | 来源:发表于2020-05-07 21:34 被阅读0次

    题目描述

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

    输出描述:

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

    第一想法

    • 用异或做可以吗

    AC代码

    class Solution
    {
    public:
        char str[256] = {0};
        queue<char> q;
      //Insert one char from stringstream
        void Insert(char ch)
        {
            q.push(ch);
            ++str[ch];
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce()
        {
            while (!q.empty() && str[q.front()] > 1 ) {
                q.pop();
            }
            if (q.empty()) {
                return '#';
            }
            else {
                return q.front();
            }
        }
    };
    

    全部是我自己做的也还有点欣慰.刚开始用栈做了,方向错了.
    栈的话是只出现一次的最后一个字符,现在要第一个,就用队列了.
    思路如下

    • 分为插入和返回两个函数
    • 插入就push进队列,然后ASCII码数组++;
    • 返回就先看是不是空,是空返回#,不是空看是不是>1大于1就pop,到=1的为止,就是第一个不重复的字符.

    相关文章

      网友评论

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

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