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,ERRORif (list.get(list.size()-1).equals("Double")) {return "ERROR";}//判断特殊情况,是否合法if (!en.containsAll(list) && !cn.containsAll(list)) {return "ERROR";}// 分情况判断,英文可能又Doubleif (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);}
}