电话号码分身
程序员文章站
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
思路分析
- 找到单词的特有字母
Z~~~~>ZERO
W~~~~>TWO
U~~~~>FOUR
G~~~~>EIGHT
X~~~~>SIX - 将上述(1中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
- 在剩下的单词中取特有字母
O~~~~>ONE
T~~~~>THREE
F~~~~>FIVE
S~~~~>SEVEN - 将上述(3中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
- 在剩下的单词中取特有字母
I~~~~>NINE - 将上述(5中)单词在分身后的号码中去掉(字母不连续) ,并替换为分身前的数字
- 将得到的数字按照升序排列并输出
代码实现
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);
}
}
下一篇: TCP协议与UDP协议的区别: