电话号码分身

题目描述

继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);
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值