欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

电话号码分身

程序员文章站 2022-07-10 14:33:15
...

题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 (”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

输入描述

第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)

输出描述

输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。

示例

输入

4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO

输出

0
234
345
0345

思路分析

  1. 找到单词的特有字母
    Z~~~~>ZERO
    W~~~~>TWO
    U~~~~>FOUR
    G~~~~>EIGHT
    X~~~~>SIX
  2. 将上述(1中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
  3. 在剩下的单词中取特有字母
    O~~~~>ONE
    T~~~~>THREE
    F~~~~>FIVE
    S~~~~>SEVEN
  4. 将上述(3中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
  5. 在剩下的单词中取特有字母
    I~~~~>NINE
  6. 将上述(5中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
  7. 将得到的数字按照升序排列并输出

代码实现

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    public void phone(String[] phoneNums) {
        Map<String, String> nums = new HashMap<String, String>();// 每个数字的标志
        nums.put("Z", "ZERO");
        nums.put("W", "TWO");
        nums.put("U", "FOUR");
        nums.put("G", "EIGHT");
        nums.put("X", "SIX");
        nums.put("O", "ONE");
        nums.put("T", "THREE");
        nums.put("F", "FIVE");
        nums.put("S", "SEVEN");
        nums.put("I", "NINE");
        Map<String, String> numMap = new HashMap<String, String>();// 分身前的对应数字
        numMap.put("Z", "2");
        numMap.put("W", "4");
        numMap.put("U", "6");
        numMap.put("G", "0");
        numMap.put("X", "8");
        numMap.put("O", "3");
        numMap.put("T", "5");
        numMap.put("F", "7");
        numMap.put("S", "9");
        numMap.put("I", "1");
        String[] key = { "Z", "W", "U", "G", "X", "O", "T", "F", "S", "I" };
        String[] wordpart;
        for (int i = 0; i < phoneNums.length; i++) {
            for (int k = 0; k < key.length; k++) {
                while (phoneNums[i].indexOf(key[k]) >= 0) {
                    wordpart = nums.get(key[k]).split("");
                    for (int j = 0; j < wordpart.length; j++) {
                        phoneNums[i] = phoneNums[i].replaceFirst(wordpart[j], "");
                    }
                    phoneNums[i] += numMap.get(key[k]);
                }
            }
            sort(phoneNums[i]);
        }
    }

    /**
     * 取最小
     *
     * @param phone
     */
    public void sort(String phone) {
        String[] phonepart = phone.split("");
        String temp;
        for (int i = 1; i < phonepart.length; i++) {// 插入排序
            for (int j = i; j > 0 && phonepart[j].compareTo(phonepart[j - 1]) < 0; j--) {
                temp = phonepart[j];
                phonepart[j] = phonepart[j - 1];
                phonepart[j - 1] = temp;
            }
        }
        for (int i = 0; i < phonepart.length; i++) {
            System.out.print(phonepart[i]);
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Main main = new Main();
        Scanner scanner = new Scanner(System.in);
        int times = Integer.valueOf(scanner.nextLine());
        String[] phoneNums = new String[times];
        for (int i = 0; i < times; i++) {
            phoneNums[i] = scanner.nextLine();
        }
        main.phone(phoneNums);
    }
}
相关标签: 编程语言 JAVA