劍指offer------字元流中第一個不重複的字元(java版)
阿新 • • 發佈:2019-02-08
一 題目
請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。 如果當前字元流沒有存在出現一次的字元,返回‘#’
二 例子
輸入'g',輸出'g'
輸入‘go’,輸出'gg'
輸入'goo',輸出'ggg'
輸入'goog',輸出'ggg#'
三 思路
因為一個字元不會超過8位,所以建立一個大小為256的整形陣列,建立一個List,存放只出現一次的字元。insert時先對該字元所在陣列位置數量+1,再判斷該位置的值是否為1,如果為1,就新增到List中,不為1,則表示該字元已出現不止1次,然後從List中移除,取出時先判斷List的size是否為0,不為0直接List.get(0),就可以得到結果,否則返回‘#’
四 程式原始碼
import java.util.ArrayList;
import java.util.List;
public class Solution {
int []countArr = new int[128];
List<Character> charList = new ArrayList<Character>();
//Insert one char from stringstream
public void Insert(char ch){
countArr[ch] ++;
if (countArr[ch] == 1) {
charList.add(ch);
} else {
charList.remove((Character)ch);
}
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce(){
if (charList.size() == 0) {
return '#';
} else {
return charList.get(0);
}
}
}