Java统计字符串中出现次数最多的的英文字母

一道简单的关于容器使用的笔试题,思路很简单,但是有的方法真的是不用不知道。
思路:

(1)用HashMap 装,key放字符,value放统计数值
(2)预防有的字符出现次数一样,返回值也要用map装
(3)同一批的统计数值一样的字符,在发现比他们更大的出现次数的字符时,必须全部清除掉。
(4)默认第一个就是最大的,然后开始比较。
(5)整个过程分三步:1把String拆成 char[] 。 2循环char[],统计出每个字符出现的次数。 3利用迭代器模式,循环输出全部的map里面的元素,并且根据value比较大小。

// 传入一个字符串,统计每个字符出现的个数,并选出最多的那一个
    @RequestMapping("/countChar")
    public Map countChar(){
        String a = "abbbbcdaaa";
        char [] strArr = a.toCharArray();

        Map<Character,Integer> countMap = new HashMap<Character,Integer>();
        Map<Character,Integer> bigMap = new HashMap<Character,Integer>();

        for (int i = 0; i < strArr.length; i++) {
            // 首先判断map中是否有这个字符,没有的话新增,有的话value+1。
            if(countMap.get(strArr[i]) == null){
                // 找不到就是空,设置value为1
                countMap.put(strArr[i], 1);
            } else {
                // 找到了就value值+1
                countMap.put(strArr[i], countMap.get(strArr[i])+1);
            }
        }

        Integer MaxValue = 0;
        // 循环找出value值最大的key,就是出现最多的字符(注意可能有多个出现次数相同)
        Iterator<Map.Entry<Character,Integer>> iterator = countMap.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry entry = iterator.next();
            Character NowChars = (Character) entry.getKey();
            Integer NowValue = (Integer) entry.getValue();
            if(bigMap.isEmpty()){
                // 如果是空的,则把第一个当最大的放进去
                bigMap.put(NowChars,NowValue);
                MaxValue = NowValue;
            } else {
                // 不是空,则拿value出来比较
                if(NowValue> MaxValue){
                    // 如果当前循环的数值大于定义中的最大,清空原来的map表, 再把新的放进去。
                    bigMap.clear();
                    bigMap.put(NowChars,NowValue);
                } else if(NowValue == MaxValue){
                    // 统计数值相等,不清空map,直接放入
                    bigMap.put(NowChars,NowValue);
                } else {}
            }
        }

        return bigMap;
    }

在这里插入图片描述

后续有更好的更简便的优化方法再写上来~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章