题解 | #字符统计#
字符统计
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); } } }