标签:
【题目】请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。如果当前字符流没有存在出现一次的字符,返回#字符。
1 package com.exe6.offer; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 /** 9 * 【题目】请实现一个函数用来找出字符流中第一个只出现一次的字符。 10 * 例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。 11 * 当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 12 * @author WGS 13 * 14 */ 15 public class FistNoRepeatChar { 16 Map<Character,Integer> map=new HashMap<>(); 17 List<Character> list=new ArrayList<>(); 18 19 public void insert(char ch){ 20 //第一次出现就全部添加 21 if(!map.containsKey(ch)){ 22 map.put(ch, 1); 23 list.add(ch); 24 }else{ 25 map.put(ch, map.get(ch)+1); 26 if(list.contains(ch)){ 27 list.remove(Character.valueOf(ch)); 28 } 29 } 30 } 31 32 public char appear(){ 33 if(list.isEmpty()) return ‘#‘; 34 return list.get(0); 35 } 36 public static void main(String[] args) { 37 FistNoRepeatChar f=new FistNoRepeatChar(); 38 char ch=‘g‘; 39 f.insert(ch); 40 ch=‘o‘; 41 f.insert(ch); 42 ch=‘o‘; 43 f.insert(ch); 44 ch=‘g‘; 45 f.insert(ch); 46 ch=‘l‘; 47 f.insert(ch); 48 ch=‘e‘; 49 f.insert(ch); 50 System.out.println(f.appear()); 51 } 52 53 }
标签:
原文地址:http://www.cnblogs.com/noaman/p/5566611.html