【剑指offer】78.字符流中第一个不重复的字符
总目录:
1.问题描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g" 。当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是"l"。
如果当前字符流没有存在仅出现一次的字符时,返回#字符。
数据范围:字符串长度满足 1≤n≤1000,字符串中出现的字符一定在 ASCII 码内。
进阶:空间复杂度 O(n),时间复杂度 O(n)
输入:"google",返回值:"ggg#ll"
输入:"abcdee",返回值:"aaaaaa"
2.问题分析
基本思想是,使用哈希来便利查找是否重复,使用队列来保证弹出顺序。
需要注意的是已经存入队列的元素可能已经过期,所以还需要统计存入队列中元素已经出现的次数。所以索要目标值时需要忽略队列中已经过期的元素。
3.代码实例
1 class Solution 2 { 3 public: 4 unordered_map<char, int> mp; 5 queue<char> q; 6 //Insert one char from stringstream 7 void Insert(char ch) { 8 //第一次出现加入队列中 9 if(mp.find(ch) == mp.end()) 10 q.push(ch); 11 //哈希表记录字符出现次数 12 mp[ch]++; 13 } 14 //return the first appearence once char in current stringstream 15 char FirstAppearingOnce() { 16 while(!q.empty()){ 17 //第一个不重复的字符 18 if(mp[q.front()] == 1) 19 return q.front(); 20 //弹出前面的已经重复的字符 21 else 22 q.pop(); 23 } 24 //都重复了 25 return '#'; 26 } 27 };
本文作者:OhOfCourse
本文链接:https://www.cnblogs.com/OhOfCourse/p/16963837.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步