剑指offer50_第一个只出现一次的字符
题目描述
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述
- 如果当前字符流没有存在出现一次的字符,返回#字符。
解题思路
- 采用散列表存储,键存储的是字符,值存储的是字符的次数
- 因为是数据流读入要保证数据的顺序性,因此我采用LinkedHashMap实现,HashMap是无序的,但LinkedHashMap是有序表,因此可以满足要求
- 静态代码块用于初始化map
- 插入的过程就是检索是否存在这个key,存在就将值加1,不存在就将put值1进去
- 取出的过程就是从头遍历,然后找到第一个value值是1的将其返回
Java源代码
import java.util.*;
public class Solution {
private static Map<Character, Integer> map;
{
map = new LinkedHashMap<>();
}
//Insert one char from stringstream
public void Insert(char ch)
{
if (map.containsKey(ch)) {
int temp = map.get(ch);
map.put(ch, temp+1);
}
else map.put(ch, 1);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue()==1) return entry.getKey();
}
return '#';
}
}
本文标题:剑指offer50_第一个只出现一次的字符
本文链接:https://www.haomeiwen.com/subject/lzvtbqtx.html
网友评论