ACM —— 1002 487-3279

解题代码:

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;


public class Main {

	static Map<Character, Integer> mMap = new HashMap<Character, Integer>();
	 //初始化映射关系
	 /**
	   A, B, and C map to 2 
	   D, E, and F map to 3 
	   G, H, and I map to 4 
	   J, K, and L map to 5 
	   M, N, and O map to 6 
	   P, R, and S map to 7 
	   T, U, and V map to 8 
	   W, X, and Y map to 9
	  */
	 static {
		 mMap.put('0',0);
		 mMap.put('1',1);
		 mMap.put('2',2);mMap.put('A',2);mMap.put('B',2);mMap.put('C',2);
		 mMap.put('3',3);mMap.put('D',3);mMap.put('E',3);mMap.put('F',3);
		 mMap.put('4',4);mMap.put('G',4);mMap.put('H',4);mMap.put('I',4);
		 mMap.put('5',5);mMap.put('J',5);mMap.put('K',5);mMap.put('L',5);
		 mMap.put('6',6);mMap.put('M',6);mMap.put('N',6);mMap.put('O',6);
		 mMap.put('7',7);mMap.put('P',7);mMap.put('R',7);mMap.put('S',7);
		 mMap.put('8',8);mMap.put('T',8);mMap.put('U',8);mMap.put('V',8);
		 mMap.put('9',9);mMap.put('W',9);mMap.put('X',9);mMap.put('Y',9);
	 }

	public static void main(String[] args) {
		HashMap<String,Integer> countMap = new HashMap<String, Integer>();
		Scanner stdin = new Scanner(System.in);
		long num = stdin.nextInt();
		for (long i = 0; i < num; i++) {
			String untreatedStr = stdin.next();
			// 处理字串
			String resultStr = treatStr(untreatedStr);
			if (countMap.containsKey(resultStr)) {
				countMap.put(resultStr, countMap.get(resultStr)+1);
			} else {
				countMap.put(resultStr, 1);
			}
		}
		// 输出结果
		outPut(countMap);
	}

	/**
	 * 输出结果
	 * @param countMap  
	 */
	private static void outPut(HashMap<String, Integer> countMap) {
		boolean flag = false;
		Object[] keys = countMap.keySet().toArray();
		Arrays.sort(keys);
		for (Object k : keys) {
			String key = (String)k;
			Integer num = countMap.get(key);
			if (num > 1) {
				System.out.println(key.subSequence(0, 3) + "-" + key.substring(3) + " " + num);
				if (!flag) {
					flag = true;
				}
			}
		}
		if (!flag) {
			System.out.println("No duplicates.");
		}
	}

	/**
	 * 处理单个字符串
	 * @param untreatedStr
	 * @return
	 */
	private static String treatStr(String untreatedStr) {
		String str = untreatedStr;
		StringBuilder sb = new StringBuilder();
		if (str.contains("-")){
			str = str.replace("-", "");
		}
		
		for (int i = 0; i < str.length(); i++) {
			Character c = str.charAt(i);
			sb.append(mMap.get(c));
		}
		return sb.toString();
	}

}


1.Map

Map可以返回它的键的Set(keySet()),它的值的Set(values()),或者它的键值对的Set(entrySet())。

HashMap:快速查找;LinkHashMap:类似HashMap,链表维护,迭代访问速度更快;TreeMap:被排序,可以取子树。

2.String、StringBuffer、StringBuilder

                           String(出生于JDK1.0时代)          不可变字符序列
                           StringBuffer(出生于JDK1.0时代)    线程安全的可变字符序列
                           StringBuilder(出生于JDK1.5时代)   非线程安全的可变字符序列
 

StringBuilder速度优于StringBuffer

3.Arrays

java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:

给数组赋值:通过fill方法。

对数组排序:通过sort方法,按升序。

比较数组:通过equals方法比较数组中元素值是否相等。

查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。


 

猜你喜欢

转载自blog.csdn.net/WYYZ5/article/details/48247013