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)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e
    设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
    数据结构-顺序表基本操作的实现(含全部代码)【转】
    【转】结构体指针
    结构体(第十四章 )
    线性表
    第二章 c语言概述
    时间复杂度
    软件质量与测试 黑盒测试
    软件质量保证与测试 基本内容
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12332014.html
Copyright © 2011-2022 走看看