HJ102字符统计

 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 }

 

posted @ 2021-11-16 13:55  yekaiIT  阅读(174)  评论(0编辑  收藏  举报