OJ1104. 【软件认证】电话号码转换

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);
    }
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hustoj.iso 是一个软件系统镜像文件。Hustoj是一个开源的在线评测系统,它被广泛应用于大学和高中的程序设计教学中。该系统的目标是提供一个方便使用的在线评测和训练环境,使学生能够提交他们的程序代码,并获得即时的评测结果。 hustoj.iso 是Hustoj的系统镜像文件,可以用来部署Hustoj系统。通过将hustoj.iso 文件安装到服务器上,就可以建立一个运行Hustoj系统的评测服务器。用户可以通过web界面访问该服务器,并提交自己的程序代码进行评测。 hustoj.iso 是一个基于Ubuntu操作系统的镜像文件。它集成了所有Hustoj系统所需要的软件和依赖项,并进行了预配置,使得安装和部署变得更加简单。用户只需要将hustoj.iso文件写入到U盘或光盘中,然后引导服务器从U盘或光盘启动,就可以开始安装Hustoj系统了。 使用hustoj.iso 部署Hustoj系统,可以为学生提供一个良好的在线评测环境,帮助他们进行程序设计的学习和训练。学生可以在该系统中提交自己的程序代码,并获得详尽的评测结果,包括运行时间、内存消耗、错误信息等等。同时,Hustoj还具有包括代码分享、竞赛组织等其他功能,能够满足不同需求的学生。 总之,hustoj.iso 是一个用于部署Hustoj系统的镜像文件,通过安装hustoj.iso,可以搭建一个功能完善、易用的在线评测环境,为程序设计学习提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值