码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer五十四之字符流中第一个不重复的字符

时间:2017-10-20 13:19:35      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:style   dha   try   复位   from   bre   enc   判断   个数   

一、题目

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

二、思路

     使用LinkedHadshMap统计字符个数,详见代码注释

三、代码

技术分享
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class Solution {
    LinkedHashMap<Character, Integer> lhm = new LinkedHashMap<Character, Integer>();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        //统计字符的个数,注意用LinkedHashMap
            if (lhm.containsKey(ch)) {
                lhm.put(ch, lhm.get(ch) + 1);
            } else {
                lhm.put(ch, 1);
            }
    }
    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        //遍历map,寻找第一个只出现一次的数
        char num = 0;
        int flag=0; //判断有没有只出现一次的字符
        Set<Map.Entry<Character, Integer>> set = lhm.entrySet();
        for (Map.Entry<Character, Integer> es : set) {
            char key = es.getKey();
            int value = es.getValue();
            if (value == 1) {
                num = key;
                flag=1;//有只出现一次的字符
                break;
            }
        }
        //没有只出现一次的字符,返回‘#’
        if(flag==0){
            num=‘#‘;
        }
        flag=0;//复位,为下一次判断准备
        return num;
    }
}
View Code

---------------------------------------------

参考链接:

https://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720?tpId=13&tqId=11207&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

剑指offer五十四之字符流中第一个不重复的字符

标签:style   dha   try   复位   from   bre   enc   判断   个数   

原文地址:http://www.cnblogs.com/hezhiyao/p/7698667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!