题意:
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g" 。
当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是"l"。
方法一:
字符串+哈希表
思路:对输入的字符串计数并用字符串存储。
寻找字符串中的第一个出现的数量为1的字符。
class Solution { public: string s; unordered_map<char,int> mp;//哈希表用做计数数组 void Insert(char ch) { mp[ch]++;//计数 s+=ch; } char FirstAppearingOnce() { int len=s.size(); for(int i=0;i<len;i++){//遍历 if(mp[s[i]]==1){//寻找数量为1的第一个字符 return s[i]; } } return '#'; } };
时间复杂度:空间复杂度:
方法二:
队列+哈希表
思路:思路同方法一相同。
但利用队列代替字符串,可以减少重复。(即省去了前面不满足条件的字符(条件:第一个数量为1的字符))。
class Solution { public: queue<char> q;//队列 unordered_map<char,int> mp;//哈希表用做计数数组 void Insert(char ch) { mp[ch]++;//计数 q.push(ch);//入队 } char FirstAppearingOnce() { while(!q.empty()){ if(mp[q.front()]==1){//寻找第一个数量为1的字符 return q.front(); }else{ q.pop(); } } return '#'; } };
时间复杂度:空间复杂度: