题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。
思路:
像这种看状态的用hash最合适。
并且用queue来依序存储出现的不重复的字符,insert如果出现穿次数等于1,就压入queue,最后再来判断队列里面的hash值,大于1就弹出。
代码:
class Solution
{
public:
char FirstAppearingOnce()
{
while( !firstchar.empty() && hashtable[firstchar.front()]>1 )
firstchar.pop();
if(firstchar.empty())
return '#';
return firstchar.front();
}
private:
void Insert(char ch)
{
++hashtable[ch-'\0'];
if(hashtable[ch-'\0'] ==1 )
firstchar.push(ch);
}
int hashtable[128]; //128个字符
queue<char>firstchar;
}