1. 程式人生 > 其它 >java題目 HJ102 字元統計

java題目 HJ102 字元統計

描述

輸入一個只包含小寫英文字母和數字的字串,按照不同字元統計個數由多到少輸出統計結果,如果統計的個數相同,則按照ASCII碼由小到大排序輸出。
本題含有多組樣例輸入

資料範圍:字串長度滿足1 \le len(str) \le 1000 \1len(str)1000

輸入描述:

一個只包含小寫英文字母和數字的字串。

輸出描述:

一個字串,為不同字母出現次數的降序表示。若出現次數相同,則按ASCII碼的升序輸出。

示例1

輸入:
aaddccdc
1b1bbbbbbbbb
輸出:
cda
b1
說明:
第一個樣例裡,c和d出現3次,a出現2次,但c的ASCII碼比d小,所以先輸出c,再輸出d,最後輸出a.

import java.io.*;
import java.util.*;

public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = null;
while ((s = br.readLine()) != null) {
char[] ch = s.toCharArray();

HashMap<Character, Integer> map = new HashMap<>();
for( int i =0; i<s.length();i++) {
map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1);//統計字元出現次數
}

// for(Character c : ch) {
// if(map.containsKey(c)) {
// map.put(c, map.get(c) + 1);
// } else
// map.put(c, 1);
// }

//map加入arrayList中排序
ArrayList<Map.Entry> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry>() {
@Override
public int compare(Map.Entry o1, Map.Entry o2) {
if(o1.getValue() != o2.getValue()) {
return (int)(o2.getValue()) - (int)(o1.getValue());
}else{
return (char)(o1.getKey()) - (char)(o2.getKey());
}
}
});
//最後列印輸出
for(Map.Entry entry : list) {
System.out.print(entry.getKey());
}
System.out.println();
}
}
}