字符流中第一个不重复的字符
题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g"。当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是 "l"。
输出描述:如果当前字符流没有存在出现一次的字符,返回 # 字符。
分析:这题其实并不难,里面需要唯一注意的点就是我们需要返回的字符是 第一次只出现一次的字符, 所以当我们用 map 存储的时候,因为 map 是乱序的,所以我们需要额外判断我们返回的字符在字符流中的序号是不是最小。
这题分三步:
- 新建一个 string input 用来存储我们接收到的所有字符,同时也能给我们后续判断字符出现的顺序做参照,再新建一个 hashmap,用来存储每个字符我们接收过的次数;
- insert function 填写: 我们首先判断 hashmap 的 keyset 里有没有当前收到字符,没有我们需要把 keyset 更新,有的话我们需要把对应的 value 更新,同时我们将收到的字符串放进前面我们新建的 string input 里;
- FirstAppearingOnce function 填写: 我们需要先新建一个 int index,来储存我们现在找到的最小的只出现一次的字符的 index,然后我们新建一个 char result,因为题目里提到,如果没有找到符合的字符,我们需要返回 “#”,所以我们将 char result 设为默认值 “#”。接下来我们遍历整个 hashmap,如果有只出现一次的字符,我们记录下他的 index,如果小于我们创建的 int index,我们更新 int index,同时更新我们对应的 result。最后,我们 return result 即可。
PS:与牛客相同!
代码: