import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Collections;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String a = in.nextLine();
        Map<String,Integer> map = new HashMap<>();
        char[] b = a.toCharArray();
        for(int i=0;i<b.length;i++){
            String key = b[i]+"";
            if(!map.containsKey(key)){
                map.put(key,0);
            }
             map.put(key,map.get(key)+1);
        }
        //倒序treemap
         TreeMap<Integer,String> map2 = new TreeMap<>(Comparator.reverseOrder());
         for(String key:map.keySet()){
            Integer value = map.get(key);
            if(!map2.containsKey(value)){
                map2.put(value,"");
            }
            String value2 = key+map2.get(value);
            char[] arr =value2.toCharArray();
            //正序排序
            Arrays.sort(arr);
            //倒序排序
            Collections.reverse(Arrays.asList(arr));
            String value3 = new String(arr);
            map2.put(value,value3);
         }
         //将treemap倒序
         //Map<Integer,String> map3 = map2.descendingMap();
          for(String value:map2.values()){
            System.out.print(value);
          }
    }
}

三次for循环,是有点不太优质,但终究是实现了,核心是利用map的key不能重复的优势,有两个关键点需要

1、字符串怎么倒序?

将字符串拆解为字符串数组,通过Arrays.sort(arr)方法可以正序排序,然后通过Collections.reverse(Arrays.asList(arr))实现将字符数组倒序排序

2、map怎么倒序?

有两种方式,一种是直接初始化一个倒序treemap new TreeMap<>(Comparator.reverseOrder());另外一种是对现有treemap进行倒序排序 Map<Integer,String> map3 = treemap.descendingMap();