华为机试练习 - 字符统计

题目:

如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。

输入描述:

输入一串字符。

输出描述:

对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

2维排序,

按数量从大到小排

按asc码从小到大排

思路:

于是先存入ArrayList,利用字符本质是数字的特性,初始设为10万+ asc

然后每次有重复的-1000 (因为只统计数字和字符,char最大就100多)。

这样最后得到的是一个几万的数字, 前2位是100 - 数量(越多的数字越小),后面3位是asc。这样用TreeSet直接排序(组合的数字从小到大排序),即可完成数量从多到少,数量相同时asc码从小到大。

然后截取后3位转化为char输出即可。

import java.util.*;

        import static java.util.Collections.sort;

public class Main{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        while(s.hasNext()) {
            ArrayList<Character> cAl = new ArrayList();
            ArrayList<Integer> intAl = new ArrayList();

            String str = s.nextLine();
            char[] cArr = str.toCharArray();

            for (int i = 0; i < cArr.length; i++) {

                char c = cArr[i];

                if (c == '\0') {
                    break;
                }


                boolean yn = false;
                if (c >= 'A' && c <= 'Z') {
                    yn = true;
                }
                if (c >= 'a' && c <= 'z') {
                    yn = true;
                }
                if (c >= '0' && c <= '9') {
                    yn = true;
                }
                if (c == 0) {
                    yn = true;
                }

                if (yn == true) {
                    if (cAl.contains(c)) {
                        int index = cAl.indexOf(c);
                        int n = intAl.get(index);
                        n = n - 10000;
                        intAl.set(index, n);
                    } else {
                        cAl.add(c);
                        intAl.add((int) c + 1000000);
                    }
                }
            }


            TreeSet<Integer> ts = new TreeSet(intAl);
            for (Integer i : ts) {
                String temp = i.toString();

                int l = temp.length();
                temp = temp.substring(l - 4, l);
                System.out.print((char) Integer.parseInt(temp) + "");
            }
            System.out.println();

        }
    }
}

猜你喜欢

转载自www.cnblogs.com/clamp7724/p/12160298.html