题目描述
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入描述:
第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出描述:
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
思路:
找特征字母即可
1、ZERO-->Z TWO-->W FOUR-->U SIX-->X EIGHT-->G
2、ONE-->O THREE-->T FIVE-->F SEVEN-->S
3、NINE-->I
import java.util.HashMap;
import java.util.Scanner;
public class Main {
private static int[] telnumbercnt = new int[10];
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int totalCount = cin.nextInt();
String telCloned = null;
while(totalCount-->0){
telCloned = cin.next();
telnumbercnt = new int[10];
HashMap<Character,Integer> map = Main.calculateCharCounts(telCloned);
//1、处理 ZERO,TWO,FOUR,SIX,EIGHT;这四个均可通过一个字母来进行唯一确定
Main.recognize02468(telCloned,map);
//2、步骤1完成后会发现 ONE,THREE,FIVE,SEVEN 也可以用一个字母来唯一确定 (前提是步骤1已经完成)
Main.recognize1357(telCloned,map);
//3、处理NINE
Main.recognize9(telCloned,map);
Main.print();
}
cin.close();
}
private static void print() {
for(int i=0;i<telnumbercnt.length;i++) {
for(int j=1;j<=telnumbercnt[i];j++)
System.out.print(i);
}
System.out.println();
}
private static void recognize9(String telCloned, HashMap<Character, Integer> map) {
//NINE --> I 或者E也可以
Integer cnt = 0;
if((cnt = map.get('I'))!=null&&cnt!=0) {
telnumbercnt[1] = cnt;
adjustMap("NINE",map,cnt);
}
}
private static HashMap<Character,Integer> calculateCharCounts(String string){
HashMap<Character,Integer> hashmap = new HashMap<Character,Integer>();
char[] chars = string.toCharArray();
for(char ch : chars) {
if(hashmap.containsKey(ch))
hashmap.put(ch, hashmap.get(ch)+1);
else
hashmap.put(ch, 1);
}
return hashmap;
}
private static void recognize02468(String telCloned,HashMap<Character,Integer> map) {
//ZERO-->Z TWO-->W FOUR-->U SIX-->X EIGHT-->G
Integer cnt = 0;
if((cnt = map.get('Z'))!=null&&cnt!=0) {
telnumbercnt[2] = cnt;
adjustMap("ZERO",map,cnt);
}
if((cnt = map.get('W'))!=null&&cnt!=0){
telnumbercnt[4] = cnt;
adjustMap("TWO",map,cnt);
}
if((cnt = map.get('U'))!=null&&cnt!=0){
telnumbercnt[6] = cnt;
adjustMap("FOUR",map,cnt);
}
if((cnt = map.get('X'))!=null&&cnt!=0){
telnumbercnt[8] = cnt;
adjustMap("SIX",map,cnt);
}
if((cnt = map.get('G'))!=null&&cnt!=0){
telnumbercnt[0] = cnt;
adjustMap("EIGHT",map,cnt);
}
}
private static void adjustMap(String str,HashMap<Character,Integer> map,int cnt) {
char[] chars = str.toCharArray();
for(char ch : chars) {
map.put(ch, map.get(ch)-cnt);
}
}
private static void recognize1357(String telCloned,HashMap<Character,Integer> map) {
//ONE-->O THREE-->T FIVE-->F SEVEN-->S
Integer cnt = 0;
if((cnt = map.get('O'))!=null&&cnt!=0){
telnumbercnt[3] = cnt;
adjustMap("ONE",map,cnt);
}
if((cnt = map.get('T'))!=null&&cnt!=0){
telnumbercnt[5] = cnt;
adjustMap("THREE",map,cnt);
}
if((cnt = map.get('F'))!=null&&cnt!=0){
telnumbercnt[7] = cnt;
adjustMap("FIVE",map,cnt);
}
if((cnt = map.get('S'))!=null&&cnt!=0){
telnumbercnt[9] = cnt;
adjustMap("SEVEN",map,cnt);
}
}
}