劍指Offer 字元流中第一個不重複的字元

鬼王呵發表於2020-11-29

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 字元流中第一個不重複的字元
 *
 * 請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。
 * 當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。
 *
 * 如果當前字元流沒有存在出現一次的字元,返回#字元。
 */
public class JZ054TheFirstCharacterInTheCharacterStreamThatDoesNotRepeat {

    Map<Character, Integer> map = new HashMap<>();
    List<Character> list = new ArrayList<>();

    //Insert one char from stringstream
    public void Insert(char ch) {
        map.put(ch, map.getOrDefault(ch, 0) + 1);
        list.add(ch);
    }

    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce() {
        char ch = '#';
        for (char key : list) {
            if (map.get(key) == 1) {
                ch = key;
                break;
            }
        }
        return ch;
    }

}

 

相關文章