zoukankan      html  css  js  c++  java
  • 64. 字符流中第一个只出现一次的字符

    使用 hash 映射 和队列,

        字符流中出现一次的字符都会存在队列中,刚好可以利用队列的先进先出的特性。如果队列不为空,则返回队头元素,为空,则返回 ‘#’
        将字符在hash的对应位置加一计数,然后检查这个元素的个数是否满足第一次出现,若满足则直接插入队列中,否则,检查队头元素是否是字符串流中的第一个字符,如果不是,则弹出,直到满足队列为空或者队头元素只出现了一次。
    ————————————————
    原文链接:https://blog.csdn.net/wchzh2015/article/details/90342279

    class Solution{
    public:
    
        unordered_map<char,int>count;
        queue<char> q;
        //Insert one char from stringstream
        void insert(char ch){
            //当新的字符已经重复,则不插入,而且将队首有可能重复的pop出来。goo,当新来第二个O,
            //此时队首不重复的,证明O永远不会输出,所以此时O不用插入,省一点空间。队列里只存一个O,pop的时候,count里O是两个,
            //所以O还是可以正常pop
            count[ch]++;
            //检查这个元素的个数是否满足第一次出现
            if(count[ch] > 1)
            {
                /*检查队头元素是否是字符串流中的第一个字符,如果不是,则弹出,
                     直到满足队列为空或者队头元素只出现了一次。*/
                while(q.size() && count[q.front()] > 1) 
                    q.pop();//队头元素g重复,将g弹出。如果再添加g,因为hash表中记录了g出现的次数,所以不会将g添加入队列
            }
            else q.push(ch);
        }
        //return the first appearence once char in current stringstream
        char firstAppearingOnce(){
            if(q.empty()) return '#';
            return q.front();
        }
    
    };
    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    Linux 下动态查找磁盘数量方法
    Laravel 学习 .env文件 getenv 获得环境变量的值
    win10系统怎样手动安装cab更新补丁
    TP框架中模糊查询实现
    PHP函数之HTMLSPECIALCHARS_DECODE
    Tp框架—方法中处理数据
    TP框架I方法详解
    鼠标经过图像改变实现
    TP视图命名规则之一
    Json_decode:详解
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12332014.html
Copyright © 2011-2022 走看看