字符流中第一个不重复的字符
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
C++代码:
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
class CharStatistics
{
public:
CharStatistics() {
index = 0;
for(int i=0; i < 256; i++)
myHashTable[i] = -1;// 用 -1 表示对应的字符不存在
}
//Insert one char from stringstream
void Insert(char ch) {
if(-1 == myHashTable[ch])
myHashTable[ch] = index;// hash表记录该字符对应的位置
else if(myHashTable[ch] >= 0)
myHashTable[ch] = -2;// 用 -2 表示对应的字符出现超过 1 次
index++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce() {
char ch = '#';
//int minIndex = 0x7FFFFFFF;
int minIndex = numeric_limits<int>::max();
for(int i=0; i < 256; i++) {
if(myHashTable[i] >= 0 && myHashTable[i] < minIndex) {
ch = char(i);
minIndex = myHashTable[i];
}
}
return ch;
}
private:
int myHashTable[256];
int index;
};