OJ1104. 【软件认证】电话号码转换
题目描述
某语音翻译软件,需要实现如下中英文电话号码转换功能:
若输入的是英文数字单词或Double组成的电话号码,则输出对应的中文数字单词;
若输入为中文数字单词组成的电话号码,则输出对应的英文数字单词。
若输入不合法,则输出字符串ERROR。
中文数字、英文数字分别见下表:
中文数字单词:Yi Er San Si Wu Liu Qi Ba Jiu Ling
英文数字单词:One Two Three Four Five Six Seven Eight Nine Zero
说明:
输入保证每个单词都是合法的英文数字单词/中文数字单词/Double;
合法的电话号码要么全中文,不会含 Double ;要么全英文,可能含 Double;
若含 Double:
合法格式:其后必须跟随英文数字单词,代表两个该数字。如输入DoubleSix,代表 SixSix;
不合法的格式:其后跟随的不是英文数字单词,如 DoubleLiu 或 DoubleDouble 都是非法的。
解答要求
时间限制:1000ms, 内存限制:256MB
输入
一行仅由大小写字母组成的字符串,非空且长度不大于500
输出
一个字符串,表示转换后的电话号码;若输入不合法,输出ERROR。
样例
输入样例 1 复制
SixOneThreeOneDoubleZero
输出样例 1
LiuYiSanYiLingLing
提示样例 1
输入样例 2 复制
YiLingSanSanJiu
输出样例 2
OneZeroThreeThreeNine
提示样例 2
注意:SanSan不能转换为 DoubleThree
输入样例 3 复制
DoubleLiu
输出样例 3
ERROR
提示样例 3
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. ok
*
*/
package ahwoj;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class PhoneTrans1104 {
private static String translate(String inputStr) {
List<String> en = Arrays.asList(new String[]{"One","Two","Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Zero", "Double"});
List<String> cn = Arrays.asList(new String[]{"Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu", "Ling"});
List<String> list = new ArrayList<>();
List<String> res = new ArrayList<>();
int n = 0;
// 按大写字母分割,将输入字符串分割成单词列表
for (int i = 1; i < inputStr.length(); i++) {
if (Character.isUpperCase(inputStr.charAt(i))) {
String s = inputStr.substring(n, i);
list.add(s);
n = i;
}
}
list.add(inputStr.substring(n));
// 如果最后一个单词为Double,ERROR
if (list.get(list.size()-1).equals("Double")) {
return "ERROR";
}
//判断特殊情况,是否合法
if (!en.containsAll(list) && !cn.containsAll(list)) {
return "ERROR";
}
// 分情况判断,英文可能又Double
if (en.containsAll(list)) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("Double")) {
if (list.get(i+1).equals("Double")) {
return "ERROR";
} else {
res.add(cn.get(en.indexOf(list.get(i+1))));
}
} else {
res.add(cn.get(en.indexOf(list.get(i))));
}
}
}
// 中文
if (cn.containsAll(list)) {
for (int i = 0; i < list.size(); i++) {
res.add(en.get(cn.indexOf(list.get(i))));
}
}
StringBuilder sb = new StringBuilder();
for (String tmp: res) {
sb.append(tmp);
}
return sb.toString();
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in, StandardCharsets.UTF_8.name());
String inputStr = cin.nextLine();
cin.close();
String result = translate(inputStr);
System.out.println(result);
}
}