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方法能對排序好的數組進行二分查找法操作。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章