描述
输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。
数据范围:字符串长度满足 1≤𝑙𝑒𝑛(𝑠𝑡𝑟)≤1000 1≤len(str)≤1000
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
示例1
输入:
aaddccdc
复制输出:
cda
复制说明:
样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
解题代码
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str = sc.nextLine(); TreeMap<Character, Integer> treeMap = new TreeMap<>(); TreeMap<String, Character> treeMap1 = new TreeMap<>(); for (int i = 0; i < str.length(); i++) { if (treeMap.containsKey(str.charAt(i))) { String a = "" + treeMap.get(str.charAt(i)) + str.charAt(i); treeMap1.remove(a); treeMap.put(str.charAt(i), treeMap.get(str.charAt(i)) - 1); treeMap1.put("" + treeMap.get(str.charAt(i)) + str.charAt(i), str.charAt(i)); } else { treeMap.put(str.charAt(i), Integer.MAX_VALUE); treeMap1.put("" + Integer.MAX_VALUE + str.charAt(i), str.charAt(i)); } } treeMap1.forEach((s, character) -> { System.out.print(character); }); } } }