33 lines
1.0 KiB
Java
33 lines
1.0 KiB
Java
|
# 41.2 字符流中第一个不重复的字符
|
|||
|
|
|||
|
[NowCoder](https://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720?tpId=13&tqId=11207&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
|
|||
|
|
|||
|
## 题目描述
|
|||
|
|
|||
|
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g"。当从该字符流中读出前六个字符“google" 时,第一个只出现一次的字符是 "l"。
|
|||
|
|
|||
|
## 解题思路
|
|||
|
|
|||
|
```java
|
|||
|
private int[] cnts = new int[256];
|
|||
|
private Queue<Character> queue = new LinkedList<>();
|
|||
|
|
|||
|
public void Insert(char ch) {
|
|||
|
cnts[ch]++;
|
|||
|
queue.add(ch);
|
|||
|
while (!queue.isEmpty() && cnts[queue.peek()] > 1)
|
|||
|
queue.poll();
|
|||
|
}
|
|||
|
|
|||
|
public char FirstAppearingOnce() {
|
|||
|
return queue.isEmpty() ? '#' : queue.peek();
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-1.png"></img></div>
|