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