1 /**
2 * @author: yekai <br/>
3 * Date: 2021/11/15:22:01 <br/>
4 * Description:HJ102字符统计
5 * 输入描述:
6 * 一个只包含小写英文字母和数字的字符串。
7 *
8 * 输出描述:
9 * 一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
10 *
11 */
12 import java.util.*;
13
14 public class Main{
15 public static void main(String[] args){
16 Scanner sc = new Scanner(System.in);
17 while(sc.hasNext()){
18 String s = sc.nextLine();
19 //统计字符
20 int[] arr = new int[36];
21 for(int i=0; i<s.length(); i++){
22 char c=s.charAt(i);
23 if(c>='a' &&c<='z'){//字母
24 arr[c-'a']++;
25 }else{//数字
26 arr[c-'0'+26]++;
27 }
28 }
29 //统计结果存入List集合
30 List<Node> list = new ArrayList<>();
31 for(int i=0; i<36; i++){
32 if(arr[i]!=0){
33 if(i<26){//字母
34 list.add(new Node((char)('a'+i), arr[i]));
35 }else{//数字
36 list.add(new Node((char)('0'+i-26), arr[i]));
37 }
38 }
39 }
40 //排序
41 Collections.sort(list, new Comparator<Node>(){
42 public int compare(Node a, Node b){
43 if(a.v!=b.v){//根据值排序
44 return b.v-a.v;
45 }else{//值相等根据ASCII码排序
46 return a.k-b.k;
47 }
48 }
49 });
50 //输出结果
51 for(int i=0; i<list.size(); i++){
52 System.out.print(list.get(i).k);
53 }
54 System.out.println();
55 }
56 }
57 }
58
59 class Node{
60 char k;
61 int v;
62
63 public Node(char k, int v){
64 this.k=k;
65 this.v=v;
66 }
67 }