poj 1002 java

 

 

 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List;
import java.util.Map; 
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

 
public class BaoyPoj1002Test {
 
	static List<String> target = new ArrayList<String>();
	static Map<String,Integer> result = new HashMap<String,Integer>();
	
	@SuppressWarnings({ "unchecked", "rawtypes", "resource" })
	public static void main(String args[]) throws Exception
    { 
//	            耗时时间长,10000 个大约 6219MS  第一次写的什么都没有考虑似的
//		init(); 
// 		operate();
// 		log(); 
 		    
 		 
		// 耗时 4235MS   减少 2000ms 挺不错的                          poj可以做一个 很不错的 测试平台,呵呵
		 Scanner in = new Scanner(System.in);
		 int a = in.nextInt();
		 for (int i = 0; i < a; i++) {
			String string =  in.next() ;
			String temp= toResultString(string);
			result.put(temp, result.get(temp)==null ?1: result.get(temp) +1 );
		 } 
		 Set<String> set = new TreeSet(result.keySet());
		 boolean flag = false;
			for (String key : set) {
				if (result.get(key)>1) {
					flag =true;
					String keyformat = key.substring(0, 3) + "-"+ key.substring(3, key.length());
					System.out.println(keyformat+" " + result.get(key));
				}
		 }
		 if (!flag) {
			System.out.println("No duplicates.");
		} 
		  
    } 
	
	// A-Z  65-90
 	static public char swapChar(char c) {  
		switch (c) {
		case 65:
		case 66:
		case 67:
			return '2'; 
		case 68:
		case 69:
		case 70:
			return '3'; 
		case 71:
		case 72:
		case 73:
			return '4'; 
		case 74:
		case 75:
		case 76:
			return '5'; 
		case 77:
		case 78:
		case 79:
			return '6'; 
		case 80:
		case 81:
		case 82:
		case 83:
			return '7'; 
		case 84:
		case 85:
		case 86:
			return '8'; 
		case 87:
		case 88:
		case 89:
			return '9'; 
		default:
			return '0'; 
		}
    }  
	
	private static String toResultString(String string) {
		String temp = "";  
        for (int j = 0; j < string.length(); j++) {  
            if (string.charAt(j) == '-') {  
                continue;  
            } else {  
                char achar = string.charAt(j);  
                if (achar >= '0' && achar <= '9') {  
                    temp += achar;  
                } else {  
                    temp += swapChar(achar);  
                }  
            }  
        }  
        return temp;
	} 
	
	
	
	static Map<String,Integer> phoneMap = new HashMap<String,Integer>();
	static{
		phoneMap.put("A", 2); phoneMap.put("B", 2); phoneMap.put("C", 2); 
		phoneMap.put("D", 3); phoneMap.put("E", 3); phoneMap.put("F", 3); 
		phoneMap.put("G", 4); phoneMap.put("H", 4); phoneMap.put("I", 4); 
		phoneMap.put("J", 5); phoneMap.put("K", 5); phoneMap.put("L", 5); 
		phoneMap.put("M", 6); phoneMap.put("N", 6); phoneMap.put("O", 6);  
		phoneMap.put("P", 7); phoneMap.put("R", 7); phoneMap.put("S", 7); 
		phoneMap.put("T", 8); phoneMap.put("U", 8); phoneMap.put("V", 8); 
		phoneMap.put("W", 9); phoneMap.put("X", 9); phoneMap.put("Y", 9);  
	}
	
	@SuppressWarnings({ "unused", "resource" })
	private static  void init() { 
		Scanner in = new Scanner(System.in);
		 int a = in.nextInt();
		 for (int i = 0; i < a; i++) {
			 target.add(in.next());
		 }
	}
	
	@SuppressWarnings("unused")
	private static void operate() {
       for (String string : target) {
			char[] aCharArr = stringOperate(string).toCharArray();
			char[] newCharArr = new char[aCharArr.length] ;
			int i=0;
			for (char c : aCharArr) {
				newCharArr[i++] = phoneMap.get(String.valueOf(c)) == null ? c: int2char(phoneMap.get(String.valueOf(c)));
			}
			result.put(String.valueOf(newCharArr ), result.get(String.valueOf(newCharArr)) == null ?1 :  result.get(String.valueOf(newCharArr ))+1);
	   }    
	}
	
	private static  char int2char(int aint) {
		 return   (char) (aint + 48);
	}
	
	private static String stringOperate( String string) { 
		string = string.replaceAll("-", "");
		return string.substring(0, 3) + "-"+ string.substring(3, string.length());
	}
  

	@SuppressWarnings({ "unused", "unchecked", "rawtypes" })
	private static void log() {  
		Set<String> set = new TreeSet(result.keySet());
		 boolean flag = false;
		for (String key : set) {
			if (result.get(key)>1) {
			flag =true;
				System.out.println(key+" " + result.get(key));
			}
			
		}
		 if (!flag) {
			System.out.println("No duplicates.");
		}
	}  
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值