首页 > 其他 > 详细

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

时间:2017-10-20 12:33:49      阅读:223      评论:0      收藏:0      [点我收藏+]

一、题目

  请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"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五十四之字符流中第一个不重复的字符

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!