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;
        }
    }
    
  • 相关阅读:
    利用ssh的私钥登录Linux server
    PSR-2 代码风格规范
    MySQL的四种事务隔离级别
    table添加横向滚动条
    转换图片大小
    百度地图Label 样式:label.setStyle
    鼠标的几种常用样式
    百度地图API-自定义图标覆盖物
    微信公众号自定义菜单中可加入的表情
    微信公众号项目总结
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13540468.html
Copyright © 2011-2022 走看看