class Solution { public: //Insert one char from stringstream int ascii[500] = {0};//不想用map,所以把字符转为ascii码,记录次数。其实开个128大小就够了。 queue<char> str ; void Insert(char ch) { ascii[(int)ch]++; if(str.empty()&&ascii[(int)ch]==1) str.push(ch); else if(!str.empty()&&ascii[(int)ch]==1) str.push(ch); } //return the first appearence once char in current stringstream char FirstAppearingOnce() { if(str.empty()) return '#'; else if(ascii[(int)str.front()]==1){ return str.front(); } else{ while(!str.empty()&&ascii[(int)str.front()]>1){ str.pop(); } if(str.empty()) return '#'; else return str.front(); } } };
这道题难点在于字符的哈希应用。因为我不想用map,所以把字符转为ascii码。
思路看到次数就要想到哈希,最新就要用queue。一开始想成stack了耽误点时间。