題目描述
輸出描述:
如果當前字符流沒有存在出現一次的字符,返回#字符。
class Solution
{
public:
int occurrence[256];//利用數組occurrence構造哈希表,將字符的ASCII值作爲鍵值,將字符對應的位置作爲哈希值
int index;
Solution() : index (0)
{
for(int i = 0; i < 256; ++i)
occurrence[i] = -1; //所有元素初始化爲-1
}
void Insert(char ch)
{
if(occurrence[ch] == -1)//當ASCII爲ch的字符第一次從字符流中讀出時,occurrence[ch]更新爲它在字符流中的位置
occurrence[ch] = index;
else if(occurrence[ch] >= 0)
occurrence[ch] = -2; //當該字符再次從字符流中讀出時,更新爲-2
index++;
}
char FirstAppearingOnce()
{
char ch = '#';
int minIndex =INT_MAX;
//遍歷數組,找出最小的大於等於0的值對應的字符,就是所求的目前從字符流中讀出所有字符中第一個不重複的字符
for(int i = 0; i < 256; ++i)
{
if(occurrence[i] >= 0 && occurrence[i] < minIndex)
{
ch = (char)i;
minIndex = occurrence[i];
}
}
return ch;
}
};