题目要求:
输入的格式是:第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。
输出的格式是:对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行:No duplicates.
数据结构:Map
AC代码:
import java.util.*;
public class P1002
{
public static void main(String[] args)
{
HashMap<String, Integer> hm = new HashMap<String, Integer>();
Scanner sca = new Scanner(System.in);
int num = sca.nextInt();//电话号码数量
StringBuffer sb = new StringBuffer();
String s = new String();
for(int i = 0; i < num; i++){
//一次对输入的操作
s = sca.next();//拿到一行电话号码
for(int j = 0; j < s.length(); j++){
//将每个值转化为数字表示
char c = s.charAt(j);
if(c != '-'){
int strV = 0;
if(c >= '0' && c <= '9') strV = c-48;
else strV = getValue(c);
sb.append(strV);
}
}
//更新map
String keyV = sb.toString();
if(hm.containsKey(keyV)){
hm.put(keyV, hm.get(keyV)+1);
}
else{
hm.put(keyV, 1);
}
sb.setLength(0);
}
Object[] keyArray = hm.keySet().toArray();
Arrays.sort(keyArray);//排序
boolean b = true;
for(int i = 0; i < keyArray.length; i++){
String k = (String)keyArray[i];
if(hm.get(k) > 1){
b = false;
System.out.println(k.substring(0,3) + "-" + k.substring(3) + " "+hm.get(k));
}
}
if(b){
System.out.println("No duplicates.");
}
}
private static int getValue(char c){
if(c=='A'||c=='B'||c=='C')return 2;
else if(c=='D'||c=='E'||c=='F')return 3;
else if(c=='G'||c=='H'||c=='I')return 4;
else if(c=='J'||c=='K'||c=='L')return 5;
else if(c=='M'||c=='N'||c=='O')return 6;
else if(c=='P'||c=='R'||c=='S')return 7;
else if(c=='T'||c=='U'||c=='V')return 8;
else return 9;
}
}
</span>