题目描述
找出字符流中第一个不重复出现的字符。例如,当从字符流中只读出前两个字符\”go\”时,第一个只出现一次的字符是\”g\”。当从该字符流中读出前六个字符“google\”时,第一个只出现一次的字符是\”l\”。如果当前字符流没有存在出现一次的字符,返回#字符。
话不多说,上代码
类函数的实现如下:
//是删除排序好的链表中重复节点的题目变形class Solution{public:unordered_map<char, int> mapCheck;queue<char> qc;//Insert one char from stringstreamvoid Insert(char ch){//取出一个字符插入到map里面,插之前看一下里面有没有,有的话map中的value值加1//里面没有if (mapCheck.find(ch) == mapCheck.end()) {qc.push(ch);mapCheck[ch]++;}//里面有else if (mapCheck.find(ch) != mapCheck.end()){mapCheck[ch]++;}}//return the first appearence once char in current stringstreamchar FirstAppearingOnce(){char temp;while (!qc.empty()) {temp = qc.front();if (mapCheck[temp] == 1) {return temp;}elseqc.pop();}return \'#\';}};
主函数主要用来生成测试样例,和调用类函数,代码如下
#include<iostream>#include<unordered_map>#include<string>#include<queue>using namespace std;int main() {Solution s2;char str[] = { \'1\',\'2\',\'1\',\'4\',\'2\' };char ch;int length = strlen(str);int i = 0;while (length--) {s2.Insert(str[i]);i++;}ch = s2.FirstAppearingOnce();cout << ch << endl;}
题目没什么难的,主要是对map的使用进行练习