zoukankan      html  css  js  c++  java
  • 华为机试练习

    题目:

    如果统计的个数相同,则按照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();
    
            }
        }
    }
  • 相关阅读:
    invokerequied
    C#如何用正则表达式截取https和带端口的域名
    flex datagrid combox
    java webservice
    Flexlib 控件 http://code.google.com/p/flexlib/
    Git使用
    转:Vim常用命令
    转:oracle连接查询
    Axis2 spring发布WebService
    oracle jdbc example 示例
  • 原文地址:https://www.cnblogs.com/clamp7724/p/12160298.html
Copyright © 2011-2022 走看看