1. 程式人生 > 其它 >【劍指offer中等部分22】字元流中第一個不重複的字元(java)

【劍指offer中等部分22】字元流中第一個不重複的字元(java)

技術標籤:劍指offer資料結構java字串

一、題目描述

請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。
返回值描述:
如果當前字元流沒有存在出現一次的字元,返回#字元。

二、分析

該題和—陣列中重複的數字方法二,有點相似,思路可以互相啟發。所以我們可以用HashMap來解題。並用ArrayList來存字元。過程由下面幾部分組成:
1、判斷字元出現次數,map集合中無該字元則出現1次,即value值置為1,多出現一次,則自增一次。並且將其新增進入list集合

2、判斷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 '#'; //全部字元遍歷後,發現均重複,那麼也返回空 } }

在這裡插入圖片描述