import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); int[] counts = new int[128]; for (char c : s.toCharArray()) { counts[c]++; } ArrayList<int[]> list = new ArrayList<>(); for (int i = 0; i < counts.length; i++) { if (counts[i] > 0) { list.add(new int[] {i, counts[i]}); } } Collections.sort(list, new Comparator<int[]>() { @Override public int compare(int[] a, int[] b) { if (a[1] != b[1]) { return Integer.compare(b[1], a[1]); } else { return Integer.compare(a[0], b[0]); } } }); StringBuilder sb = new StringBuilder(); for (int[] entry : list) { sb.append((char) entry[0]); } System.out.println(sb.toString()); } }
https://www.nowcoder.com/discuss/727521113110073344
思路:
- 输入处理:使用Scanner读取输入字符串。
- 统计次数:遍历字符串的每个字符,使用数组counts记录每个字符的出现次数。
- 构建列表:将非零次数的字符及其次数存入列表。
- 排序:使用自定义比较器对列表进行排序,首先按次数降序,次数相同则按ASCII码升序。
- 生成结果:将排序后的字符拼接成字符串并输出。