欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

电话号码分身

程序员文章站 2022-03-05 13:37:00
...

题目描述

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

}


相关标签: Java实现