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

思路:

  1. 输入处理:使用Scanner读取输入字符串。
  2. 统计次数:遍历字符串的每个字符,使用数组counts记录每个字符的出现次数。
  3. 构建列表:将非零次数的字符及其次数存入列表。
  4. 排序:使用自定义比较器对列表进行排序,首先按次数降序,次数相同则按ASCII码升序。
  5. 生成结果:将排序后的字符拼接成字符串并输出。