• 华为机试练习


    题目:

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

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

    输入描述:

    输入一串字符。

    输出描述:

    对字符中的
    各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照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 == '') {
                        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();
    
            }
        }
    }
  • 相关阅读:
    JAVA内存溢出解析(转)
    检查SQL Server 2005的索引密度和碎片信息(转)
    GWT 学习总结
    支付宝techday分享成长、团队、信任
    一位年轻董事长给年轻人的30条忠告
    Oracle 培训材料
    利用JProfiler对应用服务器内存泄漏问题诊断一例(转)
    oracle 笔记
    JProfiler 使用说明
    最疼你的人是谁
  • 原文地址:https://www.cnblogs.com/clamp7724/p/12160298.html
Copyright © 2020-2023  润新知