zoukankan      html  css  js  c++  java
  • 面试题50_2:字符流中第一个只出现一次的字符

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

    解题思路

    • 空间换时间,用一个HashMap来保存每个字符出现的次数

    上代码(Java很实用)

    package zr.offer;
    import java.util.HashMap;
    
    public class Num50_2 {
    	
    	private HashMap<Character, Integer> map = new HashMap<>();
    	private StringBuffer stringBuffer = new StringBuffer();
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Num50_2 num50_2 = new Num50_2();
    		num50_2.Insert('g');
    		num50_2.Insert('o');
    		System.out.println(num50_2.FirstAppearingOnce());
    		num50_2.Insert('o');
    		num50_2.Insert('g');
    		num50_2.Insert('l');
    		num50_2.Insert('e');
    		System.out.println(num50_2.FirstAppearingOnce());
    	}
    	
        public void Insert(char ch)
        {
        	stringBuffer.append(ch);
        	if(map.containsKey(ch))
        		map.put(ch,  -1);
        	else
        		map.put(ch, stringBuffer.length() - 1);
        }
    
        public char FirstAppearingOnce()
        {
        	char ans = '#';
        	if(stringBuffer.length() < 1)
        		return ans;
        	
        	for(int i = 0; i < stringBuffer.length(); i++)
        		if(map.get(stringBuffer.charAt(i)) != -1) {
        			ans = stringBuffer.charAt(i);
        			break;
        		}    			
        	return ans;
        }
    }
    
  • 相关阅读:
    作业17
    模块
    Find the Lost Sock (异或算法)
    CD(二分)
    数字流输入
    最大连续子序列(dp)
    STL学习----lower_bound和upper_bound算法
    输入挂(减少时间)
    暴力之全排列
    【C++】判断元素是否在vector中,对vector去重,两个vector求交集、并集
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13540468.html
Copyright © 2011-2022 走看看