大家好,又见面了,我是全栈君。
早上弄了一道求高精度幂的算法,偷懒用了内部类,总觉得过意不去,所以今天重新做了一道算法题,做完心里舒服好多。
题目如下:
Description
电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, 和C 映射到 2
D, E, 和F 映射到 3
G, H, 和I 映射到 4
J, K, 和L 映射到 5
M, N, 和O 映射到 6
P, R, 和S 映射到 7
T, U, 和V 映射到 8
W, X, 和Y 映射到 9
Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。
如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)
你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。
Input
Output
No duplicates.
Sample Input
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279
Sample Output
487-3279 4
888-4567 3
310-1010 2
967-1111 1
310-4466 1
888-1200 1
代码有点乱有点罗嗦,欢迎拍砖
代码:
import java.util.ArrayList;
import java.util.Scanner;
public class ThePhoneNum {
public static void main(String args[]) {
String[] tem = new String[8];//用来存储格式化之后的电话号码
tem[3] = "-";//把电话号码第四位固定为'-'
ArrayList<String> list = new ArrayList<String>();//记录输入的不规范号码
ArrayList<String> memory = new ArrayList<String>();//用来记录格式化之后的所有号码
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[] count = new int[num]; //统计相同号码的数量
while ((num--) >= 0) {
list.add(scanner.nextLine());
}
for (int i = 0; i < list.size(); i++) {
String string = list.get(i);
String[] temparray = string.split("-");//除去输入的号码中的所有"-"
string = getStr(temparray);//把上行代码得到的字符串数组转化成字符串
for (int j = 0; j < string.length(); j++) {
String temString = string.substring(j, j + 1);
if (j < 3) {
if (isLetter(temString)) { //是否为字母
tem[j] = toNum(temString);//把字母映射成数字
} else {
tem[j] = string.substring(j, j + 1);//数字不用映射
}
} else {
if (isLetter(temString)) {
tem[j + 1] = toNum(temString);
} else {
tem[j + 1] = string.substring(j, j + 1);
}
}
}
if (tem[1] != null) {
String s = getStr(tem); //把经过转换后的号码加入到列表存储起来
if(memory.contains(s)){
count[memory.indexOf(s)]++;//如果已经存在,则直接数量上加1
}else{
memory.add(s);
}
}
}
for(String s : memory){
System.out.println(s + " "+ (count[memory.indexOf(s)]+1));//遍历列表,输出号码
}
}
private static String toNum(String temString) {
// TODO Auto-generated method stub
char c = temString.charAt(0);
String s = String.valueOf(c);
switch (c) {
case 'a':case 'b':case 'c':case 'A':case 'B':case 'C':
s = "2";
break;
case 'd':case 'e':case 'f':case 'D':case 'E':case 'F':
s = "3";
break;
case 'g':case 'h':case 'i':case 'G':case 'H':case 'I':
s = "4";
break;
case 'j':case 'k':case 'l':case 'J':case 'K':case 'L':
s = "5";
break;
case 'm':case 'n':case 'o':case 'M':case 'N':case 'O':
s = "6";
break;
case 'p':case 'r':case 's':case 'P':case 'R':case 'S':
s = "7";
break;
case 'T':case 'U':case 'V':case 't':case 'u':case 'v':
s = "8";
break;
case 'w':case 'x':case 'y':case 'W':case 'X':case 'Y':
s = "9";
break;
}
return s;
}
static boolean isLetter(String s) {
char c = s.charAt(0);
if (c >= 65 && c <= 122) {
return true;
} else {
return false;
}
}
public static String getStr(String[] args){
String str="";
for(int i=0;i<args.length;i++){
str+=(String)args[i];
}
return str;
}
}
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(转载请说明出处)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121388.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...