题解 | #字符统计#

字符统计

http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

我的简单解体思路(依靠java语言特性,常用函数、哈希表):
    1、接收输入字符串
    2、字符串拆分字符数组 
    3、统计每个字符出现的频率(哈希表存储)
    4、排序 (哈希表的value排序)
    5、输出 (哈希表遍历)

import java.util.*;

public class Main{
    
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        char[] c = str.toCharArray();
        HashMap<Character, Integer> hashMap = new HashMap<>();

        // 统计字符出现的频率 保存到哈希表中
        for(char c1: c){
            if(hashMap.containsKey(c1)){
                hashMap.put(c1, hashMap.get(c1)+1);
            }else{
                hashMap.put(c1, 1);
            }
        }
        
        // 按哈希表中的Value进行排序
        List<Map.Entry<Character,Integer>> list = new ArrayList<>(hashMap.entrySet());

        Collections.sort(list,new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                if (o1.getValue() != o2.getValue()){
                    // value不同 比较value(注意升序还是降序)
                    return o2.getValue() - o1.getValue();
                }else{
                    // value相同 比较key
                    return o1.getKey() - o2.getKey();
                }
            }
        });

        // 对排好序的结果进行输出
        Iterator<Map.Entry<Character, Integer>> iter = list.iterator();
        while(iter.hasNext()){
            Map.Entry<Character, Integer> item = iter.next();
            Character key = item.getKey();
            System.out.print(key);
        }
    }
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务