华为od-检测热点字符

题目:
输入描述
每个输入数据为行,数据之间以 1 11 个空格间隔。

第 1 11 个数字表示依次统计出现最多的 3 33 个字符。

第 2 22 个数字表示每 10 1010 个字符进行增量统计。

第 3 33 个是需要统计的字符串。

不需要校验入参合法性测试用例保证输入合法,保证第一次统计有足够的不同字符。

统计时区分字符大小写。

输入字符串最大长度为 2000000 20000002000000 。

输出描述
输出统计的结果的字符串。
样例一:

输入:3 10 aaagggbcce9999333213gggggaaaaa
输出:gac93gga9

样例二:

输入:1 10 1234567890
输出:9

java:不保证完全正确:

 public static void findHotWorld(){
        Scanner in = new Scanner(System.in);
        String[] s = in.nextLine().split(" ");
        int num = Integer.valueOf(s[0]);
        int length = Integer.valueOf(s[1]);
        int index = 0;
        StringBuffer res = new StringBuffer();
        String str = s[2];
        while(index < str.length()){
            String tmp = "";
            if (index + length > str.length()){
                tmp = str;
            }else {
                tmp = str.substring(0,index + length);
            }
            index += length;
            HashMap<String,Integer> map = new HashMap<>();
            for (int i = 0; i < tmp.length(); i++) {
                String key = String.valueOf(tmp.charAt(i));
                if (Objects.isNull(map.get(key))){
                    map.put(key,1);
                }else {
                    map.put(key,map.get(key)+1);
                }
            }
            ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
            Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                @Override
                public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                    int t = o2.getValue() - o1.getValue();
                    if (t == 0){
                        t = o2.getKey().compareTo( o1.getKey());
                    }
                    return t;
                }
            });
            for (int i = 0; i < num; i++) {
                res.append(list.get(i).getKey());
            }
        }
        System.out.println(res);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值