102字符统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了102字符统计相关的知识,希望对你有一定的参考价值。

输入描述:

输入一串字符。

输出描述:

对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照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字符统计的主要内容,如果未能解决你的问题,请参考以下文章

102字符统计

华为机试HJ102:字符统计

华为机试HJ102:字符统计

词频统计单元测试

VIM - 字数统计

201671010432词频统计软件项目报告