1. 程式人生 > >【102】字符統計

【102】字符統計

asi static cnblogs ons bsp span inpu next cti

輸入描述:

輸入一串字符。

輸出描述:

對字符中的
各個英文字符(大小寫分開統計),數字,空格進行統計,並按照統計個數由多到少輸出,如果統計的個數相同,則按照ASII碼由小到大排序輸出 。如果有其他字符,則對這些字符不用進行統計。

示例1
輸入
aadddccddc
輸出
dca


思路: 1 首先按字符的ASCII碼從小到大的排序的方式將字符存儲到一個Map當中; 2 統計完字符對應的出現次數後,將map轉化成List後,使用Collections.sort()的方式對Map的value值,即次數進行從大到小的排序; 3 輸出;註意最後需要換行(反人類的測試用例)。 代碼:
import java.util.*;
import java.util.Map.Entry;

public class Main {

    public static void getCount(String input){
        if(input == null || input.length() <= 0){
            return;
        }
        char[] arrs = input.toCharArray();
        //按字符的ASCII碼排序,由小到大
        Comparator<Character> com1 = new
Comparator<Character>(){ @Override public int compare(Character o1, Character o2) { return o1.compareTo(o2); } }; TreeMap<Character, Integer> map = new TreeMap<>(com1); for(int i = 0; i < arrs.length; i++){
char c = arrs[i]; if(c == ‘ ‘ || c >= ‘0‘ && c <= ‘9‘ || c >= ‘a‘ && c <= ‘z‘ || c >= ‘A‘ && c <= ‘Z‘){ map.put(c, (map.get(c) == null ? 0 : map.get(c) ) + 1); } } ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet()); //按字符出現的次數排序,由大到小 Comparator<Map.Entry<Character, Integer>> com2 = new Comparator<Map.Entry<Character, Integer>>(){ @Override public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }; Collections.sort(list, com2); for(int i = 0; i < list.size(); i++){ System.out.print(list.get(i).getKey()); } System.out.println(); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String input = sc.next(); getCount(input); } } }

這裏有幾個註意的點:

1 有兩個排序時,如字符,次數都需要排序時,先在添加時對字符排序;

2 Map使用Comaparator時只能對key進行排序;

要對其value進行排序,就需要轉換成List。

3 Map轉換成List:ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());

Collections.sort(list, com2);













【102】字符統計