题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
代码:
class Solution { public: vector<char> q; int sign[255]={0}; //Insert one char from stringstream void Insert(char ch) { q.push_back(ch); } //return the first appearence once char in current stringstream char FirstAppearingOnce() { if(!sign[ q.back() ]) sign[ q.back() ] ++; else sign[ q.back() ] ++; for (int i = 0; i < q.size(); i ++){ if(sign[ q[i] ] == 1) return q[i]; } return '#'; } };
我的笔记:在类中定义两个公有变量,char类型可变数组q 和 整型数组sign用0填充。首先将每个字符流元素push_back到q数组中,并以q数组中的元素ascii码为位置记录在sign数组中,每出现一次便是其自加,最后循环判断数组中第一个值为1的元素并将其输出。