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;
    }

在這裏插入圖片描述

後續有更好的更簡便的優化方法再寫上來~

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