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

剑指 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 ' ';
    }
}

原文地址:https://www.cnblogs.com/jiyongjia/p/13191804.html