本文首發(fā)于我的個人博客:尾尾部落
題目描述
請實現(xiàn)一個函數(shù)用來找出字符流中第一個只出現(xiàn)一次的字符痛倚。例如,當(dāng)從字符流中只讀出前兩個字符"go"時澜躺,第一個只出現(xiàn)一次的字符是"g"蝉稳。當(dāng)從該字符流中讀出前六個字符“google"時抒蚜,第一個只出現(xiàn)一次的字符是"l"。
解題思路
用一個哈希表來存儲每個字符及其出現(xiàn)的次數(shù)耘戚,另外用一個字符串 s 來保存字符流中字符的順序嗡髓。
- 每次插入的時候,在字符串 s 中插入該字符收津,然后在哈希表中查看是否存在該字符饿这,如果存在則它的 value 加1,如果不存在撞秋,它在哈希表中插入該字符长捧,它的 value 為 1。
- 查找第一個只出現(xiàn)一次的字符時吻贿,按照 s 的順序串结,依次查找 map 中字符出現(xiàn)的次數(shù),當(dāng) value 為 1 時廓八,該字符就是第一個只出現(xiàn)一次的字符奉芦。
參考代碼
import java.util.HashMap;
public class Solution {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
StringBuffer s = new StringBuffer();
//Insert one char from stringstream
public void Insert(char ch)
{
s.append(ch);
if(map.containsKey(ch)){
map.put(ch, map.get(ch)+1);
}else{
map.put(ch, 1);
}
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
for(int i = 0; i < s.length(); i++){
if(map.get(s.charAt(i)) == 1)
return s.charAt(i);
}
return '#';
}
}