电话号码分身问题,小米笔试真题

题目描述
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 (”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入描述:
第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出描述:
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
示例1
输入

4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
输出

0
234
345
0345

解题思路:
差点以为入了动态规划的坑,猛然发觉原来不是
这里写图片描述

在牛客网上时:
按照纸上的顺序删除的话,会报超内存。。。(到现在也不知道什么原因)
然后改了一下,把较长的先删除就顺利过关了,为什么??为什么??

Java代码:(当然还有其他实现方式)

import java.util.Scanner;
public class Main {
    public void Solution(String data){
        int out[]=new int[10];
        StringBuffer db=new StringBuffer(data);
        while(db.toString().contains("G")){
            db.deleteCharAt(db.indexOf("E"));
            db.deleteCharAt(db.indexOf("I"));
            db.deleteCharAt(db.indexOf("G"));
            db.deleteCharAt(db.indexOf("H"));
            db.deleteCharAt(db.indexOf("T"));
            out[0]++;
        }
        while(db.toString().contains("Z")){
            db.deleteCharAt(db.indexOf("Z"));
            db.deleteCharAt(db.indexOf("E"));
            db.deleteCharAt(db.indexOf("R"));
            db.deleteCharAt(db.indexOf("O"));
            out[2]++;
        }
        while(db.toString().contains("W")){
            db.deleteCharAt(db.indexOf("T"));
            db.deleteCharAt(db.indexOf("W"));
            db.deleteCharAt(db.indexOf("O"));
            out[4]++;
        }
        while(db.toString().contains("U")){
            db.deleteCharAt(db.indexOf("F"));
            db.deleteCharAt(db.indexOf("O"));
            db.deleteCharAt(db.indexOf("U"));
            db.deleteCharAt(db.indexOf("R"));
            out[6]++;
        }
        while(db.toString().contains("X")){
            db.deleteCharAt(db.indexOf("S"));
            db.deleteCharAt(db.indexOf("I"));
            db.deleteCharAt(db.indexOf("X"));
            out[8]++;
        }
       while(db.toString().contains("T")){
            db.deleteCharAt(db.indexOf("T"));
            db.deleteCharAt(db.indexOf("H"));
            db.deleteCharAt(db.indexOf("R"));
            db.deleteCharAt(db.indexOf("E"));
            db.deleteCharAt(db.indexOf("E"));
            out[5]++;
        }
       while(db.toString().contains("S")){
            db.deleteCharAt(db.indexOf("S"));
            db.deleteCharAt(db.indexOf("E"));
            db.deleteCharAt(db.indexOf("V"));
            db.deleteCharAt(db.indexOf("E"));
            db.deleteCharAt(db.indexOf("N"));
            out[9]++;
        }
        while(db.toString().contains("O")){
            db.deleteCharAt(db.indexOf("O"));
            db.deleteCharAt(db.indexOf("N"));
            db.deleteCharAt(db.indexOf("E"));
            out[3]++;
        }
        while(db.toString().contains("F")){
            db.deleteCharAt(db.indexOf("F"));
            db.deleteCharAt(db.indexOf("I"));
            db.deleteCharAt(db.indexOf("V"));
            db.deleteCharAt(db.indexOf("E"));
            out[7]++;
        }
        while(db.toString().contains("I")){
            db.deleteCharAt(db.indexOf("N"));
            db.deleteCharAt(db.indexOf("I"));
            db.deleteCharAt(db.indexOf("N"));
            db.deleteCharAt(db.indexOf("E"));
            out[1]++;
        }
        for(int i=0;i<=9;i++){
            if(out[i]>=1){
                for(int j=0;j<out[i];j++){
                    System.out.print(i);
                }
            }
        }
    }
    public static void main(String[] args) {
        Main m=new Main();
        Scanner s=new Scanner(System.in);
        while(s.hasNextInt()){
            int num=s.nextInt();

            for(int n=0;n<num;n++){
                String data=s.next();
                m.Solution(data);
                System.out.println();
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值