首页 > 编程语言 >电话号码转换 - 华为机试真题题解(Java)

电话号码转换 - 华为机试真题题解(Java)

时间:2024-08-08 17:26:27浏览次数:18  
标签:Java 数字 真题 题解 单词 cs Double 字符串 输入

考试平台: 时习知

分值: 200分(第二题)

考试时间: 两小时(共2题)

华为机试真题

题目描述

将电话号码转换,需要实现如下的中英文电话号码转换:

  • 输入的字符串中每个数字对应为中文数字中的英文单词,如Double表示两个数字相同。
  • 将输入的中文数字字符串转换为英文单词的电话号码。
  • 若输入不合法,则输出字符串ERROR

中英文数字,英文数字分别如下:

中文数字:Yi Er San Si Wu Liu Qi Ba Jiu Ling
英文数字:One Two Three Four Five Six Seven Eight Nine Zero

说明:

  1. 输入保证每个单词都是合法的英文数字单词/中文数字单词/Double;
  2. 合法的字符串长度不会太长,不会含空格;
  3. 若含Double:
    • 合法情况下:其后必须跟随英文数字单词,代表两个数字,如DoubleSix,代表SixSix;
    • 不合法情况下:其后跟随的不是英文数字单词,如DoubleLiu 或 DoubleDouble 都是非法的。

输入

一行仅由大小写字母组成的字符串,非空且长度不大于500。

输出

一个字符串,表示转换后的电话号码;若输入不合法,输出ERROR

示例1

输入:
SixOneThreeOneDoubleZero

输出:
LiuyiSanyilingLing

解释:
SixOneThreeOneDoubleZero 对应的转换结果为 LiuyiSanyilingLing

示例2

输入:
YiLingSanSanJiu

输出:
OneZeroThreeThreeNine

解释:
YiLingSanSanJiu 对应的转换结果为 OneZeroThreeThreeNine

示例3

输入:
DoubleLiu

输出:
ERROR

解释:
DoubleLiu 是非法输入

题解

该题目要求将输入的中英文数字字符串进行转换。如果输入字符串是中文数字单词,则将其转换为对应的英文数字单词;如果输入字符串是英文数字单词,则将其转换为对应的中文数字单词。此外,输入字符串中可能包含 Double,表示后面的数字出现两次。若 Double 后面不是合法的英文数字单词,则输入非法。

题目分析

  1. 输入字符串可能包含中文数字或英文数字单词,以及 Double
  2. 输入字符串需要逐个解析,处理 Double 情况时,需要特别小心,确保其后跟随的是合法的英文数字单词。
  3. 字符串解析时,需要不断检查当前单词是否为合法的数字单词。

解题思路

  1. 使用两个列表分别存储中文数字单词和英文数字单词,以便进行相互转换。
  2. 遍历输入字符串,逐个解析单词,判断其是否为合法的数字单词或 Double
  3. 如果遇到 Double,检查其后是否跟随合法的英文数字单词,如果不是,则输出 ERROR
  4. 根据当前单词类型(中文或英文),进行对应的转换。
  5. 最后输出转换后的字符串,若中途发现非法输入,则输出 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 = new Scanner(System.in);
        char[] cs = sc.nextLine().toCharArray();
        List<String> en = Arrays.asList("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Zero", "Double");
        List<String> ch = Arrays.asList("Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu", "Ling");

        boolean error = false; // 是否输入非法
        int pos = 0; // 字符串解析到的索引位置

        StringBuilder result = new StringBuilder();
        String word = read(cs, pos);
        String preWord = "";

        // 中文 -> 英文
        boolean covertEnglish = ch.contains(word);

        while (pos < cs.length) {
            word = read(cs, pos);
            pos += word.length();

            if (word.equals("Double")) {
                // 不合法: DoubleDouble 、中文中出现 Double
                if (word.equals(preWord) || covertEnglish) {
                    error = true;
                    break;
                }
                continue;
            }

            int idx = (covertEnglish ? ch.indexOf(word) : en.indexOf(word));
            if (idx == -1) { // 转换失败
                error = true;
                break;
            }

            if (covertEnglish) {
                result.append(en.get(idx));

                if (preWord.equals("Double")) result.append(en.get(idx));
            } else {
                result.append(ch.get(idx));
            }

            preWord = word;
        }

        if (error) {
            System.out.println("ERROR");
        } else {
            System.out.println(result.toString());
        }
    }

    /**
     * 从 cs 的 s 位置开始读取一个有效的单词或拼音
     * @param cs
     * @param s
     * @return
     */
    public static String read(char[] cs, int s) {
        int e = s + 1;
        for (; e < cs.length; e++) {
            if ('A' <= cs[e] && cs[e] <= 'Z') {
                break;
            }
        }
        return new String(cs, s, e - s);
    }

}

标签:Java,数字,真题,题解,单词,cs,Double,字符串,输入
From: https://blog.csdn.net/user_longling/article/details/141032261

相关文章

  • 图片表格内容识别转换-II - 华为机试真题题解(Java)
    考试平台:时习知分值:200分考试时间:两小时(共2题)题目描述华为云推出了“通用表格识别”服务,可以将图片表格转换成文本数据。请你将文本数据进一步转换为“文本型表格”,如下图所示:输入现给出一个图片表格的文本数据:每行数据形如line3col1A,表示第3行第1列的单......
  • 【轻松拿捏】Java是如何实现跨平台性的?
    Java是如何实现跨平台性的?一、Java的跨平台性主要通过以下几个核心机制实现:二、具体实现三、示例 四、JVM工作示意图五、总结......
  • Java毕业设计 基于Springboot+Vue的电影院剧院订票选座管理系统(源码+lw+部署文档+讲
    文末获取资源,收藏关注不迷路文章目录项目介绍功能需求技术介绍项目界面关键代码目录项目介绍随着经济的发展和信息技术的普及,国内许多企业都面临了重大的挑战。企业的管理流程、战略规划如果不能进行调整,极有可能面临淘汰的风险。特别是郑州大剧院,面对大量的会员和......
  • Java学习进程6
    大家好!这是我学习Java的第六周,今天我想和大家分享一下这一周我所做的事情、下周的计划、遇到的问题以及如何解决这些问题。本周学习内容在这一周,我继续深入学习Java语言的核心概念,特别是对面向对象编程(OOP)的理解。我复习了类和对象的定义,同时也对封装、继承和多态这三个重要概念......
  • 【Java基础】向下转型
    向下转型(Downcasting)在面向对象编程中是一种常见的类型转换操作,尤其在继承和多态的上下文中。为了用大白话解释这个概念,我们可以把它比作现实生活中的角色扮演。想象一下,你正在参加一场角色扮演游戏,游戏中有各种各样的角色,比如“玩家”、“战士”、“法师”和“盗贼”。在游戏......
  • 递归解决汉诺塔问题-个人见解(java)
    这里不提供题目汉诺塔问题是很多新手遇到的第一个难题,也许并不难,但是对于本人这种麻瓜来说第一次还是很难理解的,其中的思考过程一度让我崩溃不过也不是不能理解的,需要比较长的时间网络中有许多讲解视频,但是都大同小异,似乎都不是讲给麻瓜的,也可能是我们麻瓜太笨了,不过终究还是能......
  • 20240808题解
    话说T2写了个动态树结果考场调不出来,这下大炮打蚊子了。森林(forest)题面:符合条件的森林中深度相同的点度数相同,\(1\lei\len\),求点数为\(i\)的符合条件的森林的种类数。题解:将森林中每一个根节点连到同一个节点上变成一棵树。令\(f(i)\)表示符合条件的树的种类数,那么\(f(i......
  • 关于java连接数据库时提示异常java.sql.SQLException: No suitable driver found for
    当我们测试一个新的数据库服务时,需要使用对方提供jdbc驱动来连接数据库,有时候简单的写个demo去连接,发现提示异常:java.sql.SQLException:Nosuitabledriverfoundforjdbc:jdbc:nuuv://10.1.8.99:8832/xxoo比如有以下程序连接数据库测试:publicstaticvoidmain(String[]a......
  • Mac OS 批量将Java编码iso-8859-1( english_us8859)转换为utf-8格式
    !/bin/bash#指定源目录SOURCE_DIR="./serialMonitor"#遍历源目录下所有.java文件functionconvert_to_utf8(){localfile="$1"encoding=`file-I${file}|awk-F='{print$2}'`echo"encoding:$encoding"if[[&qu......
  • SSY20240805提高组T2题解
    题干描述题目描述给定一个长度为......