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;
}