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

