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 }