• [编程题]第一个只出现一次的字符


    剑指 Offer 50. 第一个只出现一次的字符

    题目要求

    ​ 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

    我的思考

    ​ 使用无序的哈希表(HashMap)和有序的哈希表(LinkedHashMap)都能解决此问题,但是,我们还是使用无序的哈希表会更方便一些。

    思路:

    ​ 把字符串变量装入有序的哈希表,键为单个字符,value为出现的次数。

    ​ 装在完成后只需要遍历这个有序哈希表,第一次出现的且为1次的字符就是我们要的(因为是有序的哈希表,装入的顺序和我们字符串的原始顺序相同的)

    我的代码

    package jianzhioffer;
    
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    /**
     * @author jiyongjia
     * @create 2020/6/25 - 13:57
     * @descp: 使用有序的LinkedHashMap解决
     */
    public class P12_fisrtApperStr {
        
        public  char firstUniqChar(String s) {
            LinkedHashMap<Character,Integer> linkedHashMap = new LinkedHashMap<Character,Integer>();
            //1 把字符串按照key为字符,value为次数装入有序的hashMap
            char[] chars = s.toCharArray();
            for (char aChar : chars) {
                boolean b = linkedHashMap.containsKey(aChar);
                if (!b){
                    linkedHashMap.put(aChar,1);
                }else {
                    Integer integer = linkedHashMap.get(aChar);
                    integer++;
                    linkedHashMap.put(aChar,integer);
                }
            }
    
            //2 直接从LinkedHashMap中拿到第一个value为1 的字符即可。
            Iterator<Map.Entry<Character, Integer>> iterator = linkedHashMap.entrySet().iterator();
            while (iterator.hasNext()){
                Map.Entry<Character, Integer> entry = iterator.next();
                if (entry.getValue()==1){
                    return entry.getKey();
                }else {
                    continue;
                }
            }
    
            //3 走出while循环,没返回的话,就返回未找到
            return ' ';
        }
    }
    
    
  • 相关阅读:
    C语言 数组排序 – 冒泡法排序
    类加载过程
    布隆过滤器的原理及应用
    回答两个被频繁问到的代码写法问题
    关于分布式事务的理解
    根据使用者反馈,对开源项目 go-gin-api 新增两个功能
    图书速度 | 《如何高效学习》
    报错kernel:NMI watchdog: BUG: soft lockup
    容器Jenkins中运行docker
    容器Jenkins中运行docker
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13191804.html
Copyright © 2020-2023  润新知