电话号码分身
题目描述
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 (”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入描述
第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出描述:
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
示例1
示例1
输入
4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
输出
0
234
345
0345
思路:
观察(”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”)
有的字母只在一个单词中出现,比如ZERO,TWO,FOUR,SIX,EIGHT
有点字母在两个或两个以上单词中出现,比如THREE中的H就在THREE和EIGHT中出现
那么只需要统计字母出现的频次就可以计算出每个单词的频次
最后反向计算出原始数字即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int row = sc.nextInt();
sc.nextLine();
while (row != 0) {
String s = sc.nextLine();
s = s.replace(" ", "");
int[] cache = new int[26];
char[] cs = s.toCharArray();
for (char c : cs) {
cache[c - 'A']++;
}
int[] res = new int[10];
res[0] = cache['Z' - 'A'];
res[2] = cache['W' - 'A'];
res[4] = cache['U' - 'A'];
res[6] = cache['X' - 'A'];
res[8] = cache['G' - 'A'];
res[1] = cache['O' - 'A'] - res[2] - res[4] - res[0];
res[3] = cache['H' - 'A'] - res[8];
res[5] = cache['F' - 'A'] - res[4];
res[7] = cache['S' - 'A'] - res[6];
res[9] = cache['I' - 'A'] - res[6] - res[5] - res[8];
StringBuilder sb = new StringBuilder("");
for (int i = 0; i <= 9; i++) {
while (res[(i + 8) % 10] > 0) {
sb.append(i);
res[(i + 8) % 10]--;
}
}
System.out.println(sb);
row--;
}
}
}