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