48.字符流中第一个不重复的字符
题目内容:
代码及思路:
看到题目第一个会想到说用哈希表来做。
#include<iostream> #include<unordered_map> #include<deque> #include<string> using namespace std; class Solution { public: void Insert(char ch) //将所有出现的字符输入到data中 { hash[ch - '\0']++; if (hash[ch - '\0'] == 1) data.push_back(ch); } char FirstAppearingOnce() //字符输出 { while (!data.empty() && hash[data.front()] >= 2) //对于出现过1次以上的字符,弹出不要 data.pop_front(); if (data.empty()) return '#'; //如果当前字符流没有存在出现一次的字符,返回#字符 return data.front(); //余下的就是只出现一次的字符 } private: unordered_map<char, int> hash; //输出时先出现的字符先出因此使用队列,先进先出的特点 deque<char> data; }; void main() { Solution* object = new Solution; string str1; getline(cin, str1); for (int i = 0; i < str1.length(); i++) { object->Insert(str1[i]); } char res = object->FirstAppearingOnce(); cout << res << endl; }