[牛客网] 电话号码

链接:https://www.nowcoder.com/questionTerminal/ceb89f19187b4de3997d9cdef2d551e8
来源:牛客网

[牛客网] 电话号码_第1张图片
上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应。例如公司的Help Desk号码是4357,因为4对应H、3对应E、5对应L、7对应P,因此4357就是HELP。同理,TUT-GLOP就代表888-4567、310-GINO代表310-4466。

NowCoder刚进入外企,并不习惯这样的命名方式,现在给你一串电话号码列表,请你帮他转换成数字形式的号码,并去除重复的部分。

输入描述:

输入包含多组数据。

每组数据第一行包含一个正整数n(1≤n≤1024)。

紧接着n行,每行包含一个电话号码,电话号码仅由连字符“-”、数字和大写字母组成。
没有连续出现的连字符,并且排除连字符后长度始终为7(美国电话号码只有7位)。

输出描述:

对应每一组输入,按照字典顺序输出不重复的标准数字形式电话号码,即“xxx-xxxx”形式。
每个电话号码占一行,每组数据之后输出一个空行作为间隔符。

示例1

输入:
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
4
UTT-HELP
TUT-GLOP
310-GINO
000-1213
输出:
310-1010
310-4466
487-3279
888-1200
888-4567
967-1111

000-1213
310-4466
888-4357
888-4567

【题目解析】:
借助 hash 表完成字母和数字之间的转换即可,注意大小写的情况!

【解题思路】:

  1. 先用 hash 表存储字母和数字之间的映射关系
  2. 每次读到一个字符,去hash表中查找,并进行处理即可

【代码展示】:

import java.util.*;

//先用hash表存储字母和数字之间的映射关系
//每次读到一个字符,去hash表中查找
public class Main {
    public static void main(String[] args) {
        //借助字符串当成一个表,完成字母和数字之间的转换即可
        String symbol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        String number = "222333444555666777788899991234567890";
        
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int n = sc.nextInt();
            ArrayList<String> list = new ArrayList<>();
            for(int i = 0; i < n; i++) {
                String str = sc.next();
                str = str.replace("-", "");
                String result = "";
                for(int j = 0; j < 7; j++) {
                    result += number.charAt(symbol.indexOf(str.charAt(j)+""));
                }
                result = result.substring(0, 3) + "-" + result.substring(3, 7);
                if(!list.contains(result)) {
                    list.add(result);
                }
            }
            Collections.sort(list);
            for(int j = 0; j < list.size(); j++) {
                System.out.println(list.get(j));
            }
            System.out.println();
        }
    }
}

最后一句 System.out.println(); 不写是过不了的,注意~

最主要的是这句 number.charAt(symbol.indexOf(str.charAt(j)+"")) !!!

你可能感兴趣的:(笔试题)