1、題目描述
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)用來找出字符流中第一個(gè)只出現(xiàn)一次的字符顽铸。
例如茁计,當(dāng)從字符流中只讀出前兩個(gè)字符”go”時(shí),第一個(gè)只出現(xiàn)一次的字符是’g’谓松。
當(dāng)從該字符流中讀出前六個(gè)字符”google”時(shí)星压,第一個(gè)只出現(xiàn)一次的字符是’l’。
如果當(dāng)前字符流沒有存在出現(xiàn)一次的字符鬼譬,返回#字符娜膘。
樣例
輸入:"google"
輸出:"ggg#ll"
- 解釋:每當(dāng)字符流讀入一個(gè)字符,就進(jìn)行一次判斷并輸出當(dāng)前的第一個(gè)只出現(xiàn)一次的字符优质。
2竣贪、問題描述:
- 字符流,每次輸入都要判斷一次巩螃,當(dāng)前只出現(xiàn)一次的第一個(gè)字符演怎。
3、問題關(guān)鍵:
- 可以建立一個(gè)隊(duì)列牺六,保證隊(duì)頭的元素是只出現(xiàn)一次的颤枪,否則就做出隊(duì)操作。
- 便于查找隊(duì)頭元素是否一次淑际,把隊(duì)列元素用hash表保存。
4扇住、C++代碼:
class Solution{
public:
//Insert one char from stringstream
unordered_map<char, int> m;
queue<char> q;
void insert(char ch){
m[ch] ++;
if (m[q.front()] > 1)
while(q.size() && m[q.front()] > 1) q.pop();//直到隊(duì)頭元素只出現(xiàn)一次春缕,或者隊(duì)列為空。
else
q.push(ch);
}
//return the first appearence once char in current stringstream
char firstAppearingOnce(){
if (q.empty()) return '#';
else
return q.front();
}
};