题解 | #字符统计#

字符统计

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] chars = str.toCharArray();
	  // 先统计每个字符出现的次数:key为字符,value为出现的次数
        Map<Character, Integer> map = new HashMap<>();
        for (char c : chars) {
            if (!map.containsKey(c)) {
                map.put(c, 1);
            } else {
                map.put(c, map.get(c) + 1);
            }
        }
	  
	  // 反转map 的key 和 value:key 为次数, value为出现这个次数的字符集合
        Map<Integer, List<Character>> sortMap = new HashMap<>();
        Iterator<Map.Entry<Character, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Character, Integer> entry = iterator.next();
            if(!sortMap.containsKey(entry.getValue())) {
                sortMap.put(entry.getValue(), new ArrayList<>());
            }
            sortMap.get(entry.getValue()).add(entry.getKey());
        }

        Iterator<Map.Entry<Integer, List<Character>>> iterator2 = sortMap.entrySet().iterator();
        ArrayList<Integer> list = new ArrayList<>(sortMap.keySet());
	  // key倒序排序,也就是字符出现的次数倒序
        list.sort((a,b) -> b.compareTo(a));
        for (Integer integer : list) {
            List<Character> characters = sortMap.get(integer);
		  // 出现对应次数的字符顺序排序
            Collections.sort(characters);
            characters.forEach(System.out::print);
        }
    }
}

全部评论

相关推荐

03-14 18:48
重庆大学 C++
点赞 评论 收藏
分享
03-03 10:35
3d人士会梦见住进比弗利山庄吗:这四个项目属于是初学者的玩具了。不知道面试官咋问,而且双非本搞算法除了9,还是保守至少c9
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务