解题代码:
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类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
比较数组:通过equals方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。