【劍指offer中等部分22】字元流中第一個不重複的字元(java)
阿新 • • 發佈:2020-12-28
一、題目描述
請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。
返回值描述:
如果當前字元流沒有存在出現一次的字元,返回#字元。
二、分析
該題和—陣列中重複的數字方法二,有點相似,思路可以互相啟發。所以我們可以用HashMap來解題。並用ArrayList來存字元。過程由下面幾部分組成:
1、判斷字元出現次數,map集合中無該字元則出現1次,即value值置為1,多出現一次,則自增一次。並且將其新增進入list集合
實現程式碼如下:
import java.util.*;
public class Solution {
Map<Character,Integer> map = new HashMap<Character,Integer>();
List<Character> list = new ArrayList<Character>();
//Insert one char from stringstream
public void Insert(char ch)
{
if (map.containsKey(ch)){
int value = map.get(ch);
map.put(ch, ++value);
}else{
map.put(ch, 1);
}
list.add(ch);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
if(list.isEmpty ()){
return '#';
}else{
for(Character ch : list){
if(map.get(ch)==1){
return ch;
}
}
}
return '#'; //全部字元遍歷後,發現均重複,那麼也返回空
}
}