1. 程式人生 > >劍指offer------字元流中第一個不重複的字元(java版)

劍指offer------字元流中第一個不重複的字元(java版)

一 題目

請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"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);
            }
        }
}