字符流中第一个不重复的字符

题目描述

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

输出描述:

如果当前字符流没有存在出现一次的字符,返回#字符。
import java.util.ArrayList;
import java.util.HashMap;

/**
 * 
 * @author gentleKay
 * 
 * 题目描述
 * 请实现一个函数用来找出字符流中第一个只出现一次的字符。
 * 例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。
 * 当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
 * 
 * 输出描述:
 * 如果当前字符流没有存在出现一次的字符,返回#字符。
 */

public class Main53 {
	
	static HashMap<Character, Integer> map = new HashMap<>();
	static ArrayList<Character> array = new ArrayList<>();
	
	public static void main(String[] args) {
		Insert('a');
		Insert('b');
		Insert('a');
		Insert('b');
		char ch = Main53.FirstAppearingOnce();
		System.out.println(ch);
	}
	
	//Insert one char from stringstream
    public static void Insert(char ch){  
        if (map.containsKey(ch)) {
			map.put(ch, map.get(ch)+1);
		}else {
			map.put(ch, 1);
		}
        array.add(ch);
    }
    
    //return the first appearence once char in current stringstream
    public static char FirstAppearingOnce(){
    	for (char key : array) {
    		if (map.get(key) == 1) {
    			return key;
    		}
    	}
    	return '#';
    }
}

  

原文地址:https://www.cnblogs.com/strive-19970713/p/11200062.html