题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
解题思路
凡是这种出现一次的题都要新开一个HashMap用来记录每一个字符出现的次数,但是HashMap是无序的,所以还需要一个有序数组ArrayList来存储字符出现的先后顺序,再对其进行遍历,找出第一个出现次数为1次的字符。
代码
public Class Solution{
HashMap<Character,Integer> map = new HashMap<>();
ArrayList<Character> list= new ArrayList<>();
//Insert one char from stringstream
public void Insert(char ch)
{
if (!map.containsKey(ch)) {
map.put(ch,1);
list.add(ch);
}
else map.put(ch,map.get(ch)+1);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
for (char c:list){
if (map.get(c) == 1) return c;
}
return '#';
}
public static void main(String[] args) {
String s = "google";
Solution solution= new Solution();
for (char c : s.toCharArray()){
solution.Insert(c);
}
System.out.println(solution.FirstAppearingOnce());
}