您的位置:首页 > Web前端

剑指offer——字符流中第一个不重复的字符

2016-07-19 22:32 260 查看

问题描述:

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。

输出描述:

如果当前字符流没有存在出现一次的字符,返回#字符。

思路:

用HashMap保存已经出现的字符,另外再用一个ArrayList集合来存储只出现一次的字符,其中集合的第一个必然是第一个不重复的字符。

代码实现:

import java.util.HashMap;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;

public class Solution {

//创建一个HashMap用于保存每个字符的次数
Map<Character, Integer> map = new HashMap<Character, Integer>();
//创建一个List集合用于接收字符流中的字符
List<Character> list = new ArrayList<Character>();
//Insert one char from stringstream
//从字符流中插入字符到集合和Map中
public void Insert(char ch)
{
if(!map.containsKey(ch)){
map.put(ch,1);
list.add(ch);
}else{
map.put(ch,map.get(ch)+1);
if(list.contains(ch)){
list.remove(Character.valueOf(ch));
}
}
}
//return the first appearence once char in current stringstream
//得到第一个只出现一次的字符
public char FirstAppearingOnce()
{
if(list.isEmpty()) return '#';
return list.get(0);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: