华为机试练习———字符统计

146 阅读1分钟

题目

输入一个字符串,对字符中的各个英文字符,数字,空格进行统计,按照统计个数由多到少输出,如果统计的个数相同,则按照ASCII码由小到大排序输出。如果有其他字符,则对这些字符不用进行统计。

代码

public List<Map.Entry<Character, Integer>> CharacterCount(String s){
        HashMap<Character,Integer> hashMap = new HashMap();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (( c >= 'A' && c <= 'Z' ) || (c >= 'a' && c <= 'z') || ( c >= '0' && c <= '9' ) || c ==' '){
                if (hashMap.containsKey(c)){
                    hashMap.put(c, hashMap.get(c)+1);
                }else{
                    hashMap.put(c, 1);
                }
            }
        }
        List<Map.Entry<Character, Integer>> list = new ArrayList(hashMap.entrySet());

        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                //重写排序规则,按照map对象的value从大到小排序,如果value相等,则按照key的ASCII从小到大排序
                int i = o2.getValue() - o1.getValue();
                if (i==0){
                    i = Integer.valueOf(o1.getKey()) - Integer.valueOf(o2.getKey());
                }
                return i;
            }
        });
        return list;
    }

结果如图所示 l6aa3z52.png

PS:该代码未在华为机试平台运行,仅供参考!!!