题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
解题思路:采用哈希表来实现。用字符的ASCII嘛作为哈希表的键值,而把字符对应的位置作为哈希表的值。遍历所有字母,如果该字母出现1次,且该字符对应的位置<minIndex,更新minIndex
其中-1表示未出现过,-2表示多次出现,0表示只出现一次
1 class Solution 2 { 3 public: 4 Solution():index(0) 5 { 6 for(int i=0;i<256;i++) 7 occurence[i] = -1; 8 } 9 //Insert one char from stringstream 10 void Insert(char ch) 11 { 12 if(occurence[ch] == -1) 13 occurence[ch] = index; 14 else if(occurence[ch] >= 0) 15 occurence[ch] = -2; 16 index++; 17 } 18 //return the first appearence once char in current stringstream 19 char FirstAppearingOnce() 20 { 21 char ch = '