题目描述:继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),
然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入
第一行是一个整数T(1<=T<=100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
| 样例输入 4 EIGHT ZEROTWOONE OHWETENRTEO OHEWTIEGTHENRTEO |
输出
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
| 样例输出 0 234 345 0345 |
解题思路:“EIGHT”到“SEVEN”中,字母和数字存在一一对应关系的有:[G-8,Z-0,W-2,U-4,X-6],将其作为第一批次的判断条件;剩下的,存在一一对应关系的有:[T-3,F-5],将其作为第二批次的判断条件;再剩下的,存在一一对应关系的有:[I-9,O-0,S-7],将其作为第三批次的判断条件;
package BiShiTi;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/**
* 解题思路:“EIGHT”到“SEVEN”中,字母和数字存在一一对应关系的有:[G-8,Z-0,W-2,U-4,X-6],将其作为第一批次的判断条件;
* 剩下的,存在一一对应关系的有:[T-3,F-5],将其作为第二批次的判断条件;
* 再剩下的,存在一一对应关系的有:[I-9,O-0,S-7],将其作为第三批次的判断条件;
*/
public class m_0030 {
private static final String [] TRANSARR = {"EIGHT", "NINE", "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = Integer.valueOf(sc.nextLine());//样例数
String [] simple = new String[T];
for (int i = 0; i < T; i++) {
simple[i] = sc.nextLine().trim();
}
for (int i = 0; i < T; i++) {
System.out.println(decodeStr(simple[i]));
}
}
private static void deleteStr(StringBuffer oriStr, String tarStr){
for (int i = 0; i < tarStr.length(); i++) {
oriStr.deleteCharAt(oriStr.indexOf(String.valueOf(tarStr.charAt(i))));
}
}
private static String decodeStr(String _strAfter){
StringBuffer strAfter = new StringBuffer(_strAfter);
List<Integer> listBefore = new LinkedList<Integer>();
StringBuffer strBefore = new StringBuffer();
while (strAfter.indexOf("G") != -1
|| strAfter.indexOf("Z") != -1
|| strAfter.indexOf("W") != -1
|| strAfter.indexOf("U") != -1
|| strAfter.indexOf("X") != -1) {
if (strAfter.indexOf("G") != -1) {
deleteStr(strAfter, TRANSARR[0]);
listBefore.add(0);
}else if (strAfter.indexOf("Z") != -1) {
deleteStr(strAfter, TRANSARR[2]);
listBefore.add(2);
}else if (strAfter.indexOf("W") != -1) {
deleteStr(strAfter, TRANSARR[4]);
listBefore.add(4);
}else if (strAfter.indexOf("U") != -1) {
deleteStr(strAfter, TRANSARR[6]);
listBefore.add(6);
}else {
deleteStr(strAfter, TRANSARR[8]);
listBefore.add(8);
}
}
while (strAfter.indexOf("T") != -1
|| strAfter.indexOf("F") != -1) {
if (strAfter.indexOf("T") != -1) {
deleteStr(strAfter, TRANSARR[5]);
listBefore.add(5);
}else {
deleteStr(strAfter, TRANSARR[7]);
listBefore.add(7);
}
}
while (strAfter.indexOf("I") != -1
|| strAfter.indexOf("O") != -1
|| strAfter.indexOf("S") != -1) {
if (strAfter.indexOf("I") != -1) {
deleteStr(strAfter, TRANSARR[1]);
listBefore.add(1);
}else if (strAfter.indexOf("O") != -1) {
deleteStr(strAfter, TRANSARR[3]);
listBefore.add(3);
}else {
deleteStr(strAfter, TRANSARR[9]);
listBefore.add(9);
}
}
Collections.sort(listBefore);
for (int i = 0; i < listBefore.size(); i++) {
strBefore.append(listBefore.get(i));
}
return strBefore.toString();
}
}