电话号码转换 - 华为机试真题题解(Java)
考试平台: 时习知
分值: 200分(第二题)
考试时间: 两小时(共2题)
题目描述
将电话号码转换,需要实现如下的中英文电话号码转换:
- 输入的字符串中每个数字对应为中文数字中的英文单词,如Double表示两个数字相同。
- 将输入的中文数字字符串转换为英文单词的电话号码。
- 若输入不合法,则输出字符串
ERROR
。
中英文数字,英文数字分别如下:
中文数字:Yi Er San Si Wu Liu Qi Ba Jiu Ling
英文数字:One Two Three Four Five Six Seven Eight Nine Zero
说明:
- 输入保证每个单词都是合法的英文数字单词/中文数字单词/Double;
- 合法的字符串长度不会太长,不会含空格;
- 若含Double:
- 合法情况下:其后必须跟随英文数字单词,代表两个数字,如DoubleSix,代表SixSix;
- 不合法情况下:其后跟随的不是英文数字单词,如DoubleLiu 或 DoubleDouble 都是非法的。
输入
一行仅由大小写字母组成的字符串,非空且长度不大于500。
输出
一个字符串,表示转换后的电话号码;若输入不合法,输出ERROR
。
示例1
输入:
SixOneThreeOneDoubleZero
输出:
LiuyiSanyilingLing
解释:
SixOneThreeOneDoubleZero 对应的转换结果为 LiuyiSanyilingLing
示例2
输入:
YiLingSanSanJiu
输出:
OneZeroThreeThreeNine
解释:
YiLingSanSanJiu 对应的转换结果为 OneZeroThreeThreeNine
示例3
输入:
DoubleLiu
输出:
ERROR
解释:
DoubleLiu 是非法输入
题解
该题目要求将输入的中英文数字字符串进行转换。如果输入字符串是中文数字单词,则将其转换为对应的英文数字单词;如果输入字符串是英文数字单词,则将其转换为对应的中文数字单词。此外,输入字符串中可能包含
Double
,表示后面的数字出现两次。若Double
后面不是合法的英文数字单词,则输入非法。题目分析
- 输入字符串可能包含中文数字或英文数字单词,以及
Double
。- 输入字符串需要逐个解析,处理
Double
情况时,需要特别小心,确保其后跟随的是合法的英文数字单词。- 字符串解析时,需要不断检查当前单词是否为合法的数字单词。
解题思路
- 使用两个列表分别存储中文数字单词和英文数字单词,以便进行相互转换。
- 遍历输入字符串,逐个解析单词,判断其是否为合法的数字单词或
Double
。- 如果遇到
Double
,检查其后是否跟随合法的英文数字单词,如果不是,则输出ERROR
。- 根据当前单词类型(中文或英文),进行对应的转换。
- 最后输出转换后的字符串,若中途发现非法输入,则输出
ERROR
。
Java
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = n
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
🔥笔试编程真题宝典💯 文章被收录于专栏
📕分享大厂机试真题深度剖析核心考点,助你速通面试。