劍指offer 面試題50:字元流中第一個只出現一次的字元
阿新 • • 發佈:2018-11-19
題目描述:請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。
解法: 使用雜湊表occurance[256] ; 初始化occurance為-1,當遇到某個字元並且字元的occurance[ch]==-1時候,將其置為字元出現的位置index,當遇到某個字元並且字元的occurance[ch]>=0時候,說明其出現過,將occurance置為-2.最終只需要找出最小的occurance[i]即可,就是找到的第一個 只出現一次的字元
class Solution { public: //Insert one char from stringstream Solution():index(0) { for(int i=0;i<256;i++) occurance[i] = -1; } void Insert(char ch) { if(occurance[ch]== -1) occurance[ch] = index; else if(occurance[ch] >= 0 ) occurance[ch] =-2; index ++; } //return the first appearence once char in current stringstream char FirstAppearingOnce() { char ch = '#'; int min = INT_MAX; for(int i=0;i<256;++i) { if(min>occurance[i] && occurance[i] >=0) { ch = (char)i; min = occurance[i]; } } return ch; } private: int index; int occurance[256]; };