华为OD机试真题 Java 实现【字母组合】【2023Q1 200分】

news/2024/6/3 19:32:31 标签: java, 华为, 开发语言, 面试, 算法

在这里插入图片描述

一、题目描述

每个数字对应多个字母,对应关系如下:

0:a,b,c 1:d,e,f 2:g,h,i 3:j,k,l 4:m,n,o 5:p,q,r 6:s,t 7:u,v 8:w,x 9:y, z

输入一串数字后,通过数字和字母的对应关系可以得到多个字母字符串(要求按照数字的顺序组合字母字符串);

屏蔽字符: 屏蔽字符中的所有字母不能同时在输出的字符串出现,如屏蔽字符时abc,则要求字符串中不能同时出现a,b,c,但是允许同时出现a,b;a,c;b,c等;

给定一个数字字符串和一个屏蔽字符串,输出所有可能的字符组合;

例如:

输入数字字符串78和屏蔽字符串ux,输出结果为uw,vw,vx;

数字字符串78,可以得到如下字符串: uw,ux,vw,vx;由于ux是屏蔽字符串,因此排除ux,最终的输出时uw,vw,vx;

二、输入描述

第一行输入为一串数字字符串,数字字符串中的数字不允许重复,数字字符串的长度大于0,小于等于5;
第二行输入是屏蔽字符,屏蔽字符的长度一定小于数字字符串的长度,屏蔽字符串中字符不会重复。

三、输出描述

输出可能的字符串组合。

注:字符串之间使用逗号隔开,最后一个字符串后携带逗号

四、Java算法源码

java">/**
 * 78
 * ux
 */
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    // 数字字符串
    String numbers = in.nextLine();
    // 屏蔽字符串
    String noStr = in.nextLine();

    List<String> list = new ArrayList<String>();
    // 数字对应的字母组合
    String[] arr = new String[numbers.length()];
    for (int i = 0; i < numbers.length(); i++) {
        // 单个数字
        int number = Integer.valueOf(numbers.charAt(i)+"");
        // 数字对应的字母组合
        arr[i] = hashMap.get(number);
    }

    int index = 0;
    LinkedList<Character> charLine = new LinkedList<>();
    solution(arr, index, list, charLine, noStr);
    for (int i = 0; i < list.size(); i++) {
        System.out.print(list.get(i) + ",");
    }
}

/**
 *
 * @param arr 数字对应的字母组合
 * @param index 第几个字母
 * @param list 不包含屏蔽字符串的字符串集合
 * @param charLine 合格的字母集合
 * @param noStr 屏蔽字符串
 */
public static void solution(String[] arr, int index, List<String> list, LinkedList<Character> charLine, String noStr) {
    if (index == arr.length) {
        StringBuilder builder = new StringBuilder();
        for (Character c : charLine) {
            builder.append(c);
        }

        // 屏蔽字符中的所有字母不能同时在输出的字符串出现
        if (isContainsNoStr(builder.toString(), noStr)) {
            list.add(builder.toString());
        }
        return;
    }

    for (int i = 0; i < arr[index].length(); i++) {
        charLine.addLast(arr[index].charAt(i));
        solution(arr, index + 1, list, charLine, noStr);
        charLine.removeLast();
    }
}

/**
 * 是否包含屏蔽字符串
 *
 * 屏蔽字符中的所有字母不能同时在输出的字符串出现
 */
public static boolean isContainsNoStr(String s, String noStr) {
    boolean flag = false;
    // 要求按照数字的顺序组合字母字符串
    for (int i = 0; i < noStr.length(); i++) {
        if (!s.contains(noStr.charAt(i) + "")) {
            flag = true;
            break;
        }
    }
    return flag;
}

/**
 * 每个数字对应多个字母
 */
private static Map<Integer, String> hashMap = new HashMap<Integer, String>();

static {
    hashMap.put(0, "abc");
    hashMap.put(1, "def");
    hashMap.put(2, "ghi");
    hashMap.put(3, "jkl");
    hashMap.put(4, "mno");
    hashMap.put(5, "pqr");
    hashMap.put(6, "st");
    hashMap.put(7, "uv");
    hashMap.put(8, "wx");
    hashMap.put(9, "yz");
}

五、效果展示

1、输入

78
ux

2、输出

uw,vw,vx,

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【服务中心选址】【2023Q1 100分 】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述


http://www.niftyadmin.cn/n/353914.html

相关文章

超市购物车功能

1 问题 平常去超市买的要买的东西过多后&#xff0c;记不清楚怎么办&#xff1f; 2 方法 解决问题的步骤采用如下方式&#xff1a; 首先运用字典储存已有商品跟价格注释引导顾客进行操作; 通过实验、实践等证明提出的方法是有效的&#xff0c;是能够解决开头提出的问题。 代码清…

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…

『树莓派云台机器人』02. 电脑连接树莓派 配置开发环境

目录 1. 下载ssh交互工具 Xshell 与XFTP&#xff08;有过相关使用经历的朋友可以跳过这一节内容&#xff09;2. 下载VNC远程控制工具软件3. 连接过程4. Xshell 命令工具5. XFTP 文件传送工具6. 关于联网总结 欢迎关注 『树莓派云台机器人』 博客&#xff0c;持续更新中 欢迎关注…

构建高可用性的核心服务层:Coupang电子商务应用程序的技术实践

随着Coupang电子商务平台用户数量的快速增长&#xff0c;构建一个高可用性的核心服务层成为了关键任务。本文将介绍Coupang如何通过统一的NoSQL数据存储、缓存层和实时数据流等技术和策略&#xff0c;构建一个高可用性的核心服务层&#xff0c;以满足日益增长的数据流量需求&am…

Ubuntu安装Redis

安装环境&#xff1a; Ubuntu 18.04 64位 一、安装 1.1 更新仓库(非必须) sudo apt update1.2 使用 apt 从官方 Ubuntu 存储库来安装 Redis sudo apt-get install redis-server二、设置密码 2.1 打开Redis配置文件redis.conf sudo vi /etc/redis/redis.conf2.2 找到# r…

Charging management IC---IP5356

0 Preface/foreword 1 规格 2 特性 2.1 电池电压分辨率 内部采用14-bit ADC,最大能识别电压为4.4V&#xff0c;所以分辨率为&#xff1a;4.4/2^14 0.26855 mv 2.2 充电电流 VIN/VBUS充电电流大小&#xff0c;分辨率为&#xff1a;0.671387mA 2.3 放电电流 2.3.1 IOUT1 2.3…

图神经网络GNN GCN AlphaFold2 虚拟药物筛选和新药设计

文章目录 图神经网络1. Geometric Deep LearningRepresentation learning 表征学习机器学习的数据类型&#xff1a;序列、网格、图引出GNN 2. Graph Neural NetworksMachine Learning Lifecyclelearning graph is hardFeature Learning in GraphsWays to Analyze NetworksA Nai…

SSRS rdlc报表 一 创建报表

环境 vs2019 fromwork4.5 第一步 安装rdlc报表插件 vs2019使用rdlc&#xff0c;需要安装扩展插件&#xff0c;扩展→扩展管理→联机&#xff0c;搜索rdlc&#xff0c;安装Microsoft RDLC Report Designer&#xff0c;我在安装过程中&#xff0c;安装了很久都没安装成功&…