题目
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
思路
- 用一个哈希表记录字符出现的次数。
- 用一个队列,每个插入的元素进队列。每当要获得第一个只出现一次的字符时,循环判断队列头部的元素在哈希表中出现的次数,如果大于1,出队列。如果等于1,得到要返回的元素。
代码
class Solution
{
private:
queue<char> q;
vector<int> hashMap;
public:
Solution() : hashMap(128, 0) {}
//Insert one char from stringstream
void Insert(char ch)
{
++hashMap[ch];
if ( hashMap[ch] == 1 )
q.push( ch );
return;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
char res = '#';
while ( !q.empty() ) {
if ( hashMap[q.front()] == 1 ) {
res = q.front();
break;
}
q.pop();
}
return res;
}
};