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();

京公网安备 11010502036488号