华为OD机试 - 过滤组合字符串 - 深度优先搜索dfs算法(Java 2023 B卷 100分)

news2024/11/26 4:48:17

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

  • 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”
  1. 输入一串数字后,通过数字和字母的对应关系可以得到多个字母字符串(要求按照数字的顺序组合字母字符串);
  2. 屏蔽字符串:屏蔽字符串中的所有字母不能同时在输出的字符串出现,如屏蔽字符串是abc,则要求字符串中不能同时出现a,b,c,但是允许同时出现a,b或a,c或b,c等;
  3. 给定一个数字字符串和一个屏蔽字符串,输出所有可能的字符组合;
  4. 例如输入数字字符串78和屏蔽字符串ux,输出结果为uw。

二、输入描述

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

三、输出描述

输出可能的字符串组合

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

四、解题思路

  1. 定义数组arr,存储每个数字关联多个字母;
  2. 第一行输入为一串数字字符串;
  3. 第二行输入是屏蔽字符串;
  4. 定义集合list,加载第一行字母关联的数字;
  5. 并将集合list加载到map中;
  6. 使用深度优先搜索dfs算法,遍历map;
  7. 输出所有可能的输出可能的字符串组合。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    static Map<Integer, List<Character>> map = new HashMap<Integer, List<Character>>();
    static String[] numArr = null;
    static List<String> okList = new ArrayList<>();

    public static void main(String[] args) {
        // 每个数字关联多个字母,关联关系如下
        String[] arr = {"abc", "def", "ghi", "jkl", "mno", "pqr", "st", "uv", "wx", "yz"};
        Scanner sc = new Scanner(System.in);
        String input1 = sc.nextLine();
        String input2 = sc.nextLine();
        List<Integer> numberList = new ArrayList<>();
        for (int i = 0; i < input1.length(); i++) {
            numberList.add(Integer.parseInt(input1.charAt(i) + ""));
        }
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (numberList.contains(i)) {
                // 第一行字母关联的数字
                List<Character> list = new ArrayList<Character>();
                for (int j = 0; j < arr[i].length(); j++) {
                    list.add(arr[i].charAt(j));
                }
                map.put(count++, list);
            }
        }
        numArr = new String[map.size()];
        dfs(0);
        for (String s : okList) {
            if (s.indexOf(input2) == -1) {
                System.out.print(s + ",");
            }
        }
    }

    static StringBuilder builder = new StringBuilder();
    public static void dfs(int num) {
        if (num == map.size()) {
            for (int i = 0; i < numArr.length; i++) {
                builder.append(numArr[i]);
            }
            okList.add(builder.toString());
            builder.setLength(0);
            return;
        }
        for (int i = 0; i < map.get(num).size(); i++) {
            numArr[num] = map.get(num).get(i) + "";
            dfs(num + 1);
        }
    }
}

六、效果展示

1、输入

89
wy

2、输出

wz,xy,xz,

3、说明

89对应"wx", “yz”。

屏蔽wy。

“wx”, "yz"四种有效组合,屏蔽wy,变为wz,xy,xz,

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

共享数据-vue3

vuex方案 安装vuex4.x 两个重要变动&#xff1a; 去掉了构造函数Vuex&#xff0c;而使用createStore创建仓库 为了配合composition api&#xff0c;新增useStore函数获得仓库对象&#xff1b;获取路由对象使用useRouter global state 由于vue3的响应式系统本身可以脱离…

node.js 简单实验 创建一个简单的web服务

概要&#xff1a;用一个最简单是例子感受一下node.js 的能力 1.代码 var http require("http") http.createServer(function (request, response) { response.writeHead(200, {Content-Type: text/plain}); response.end(Hello World\n); }).listen(8081); cons…

浪潮信息企业级SSD:降本又增效?AIPR技术解决高并发读取性能大问题

NAND闪存作为一种非易失性存储介质&#xff0c;凭借其功耗低、重量轻、性能佳和断电后仍然能保存数据等特点&#xff0c;成为比硬盘驱动器更好的存储设备&#xff0c;非常适合作为便携设备的存储器来使用。 固态硬盘&#xff08;Solid State Disk&#xff0c;简称SSD&#xff0…

灯笼解算—kinfx

kinfx 刚刚开始学 做的可能比较复杂了。 skleton ——画的骨骼 rigpose 主要控制动态 sin((0.05*Framech(“…/Ctrol/ofset”))*ch(“…/Ctrol/freq”))*ch(“…/Ctrol/amp”) 用的简单的sin函数 变成实心 方便控制弯曲 原地做完 匹配ani位置 matrix mat point(1, transform…

智慧能源管理系统助力某制造企业提高能源利用效率

随着全球能源需求不断增加和能源价格的上涨&#xff0c;企业和机构日益意识到能源管理的重要性。传统的能源管理方式不仅效率低下&#xff0c;还容易造成资源浪费和环境污染。因此&#xff0c;许多企业开始探索采用智慧能源管理系统来提高能源利用效率&#xff0c;降低能源成本…

C#__自定义类传输数据和前台线程和后台线程

// 前台线程和后台线程 // 默认情况下&#xff0c;用Thread类创建的线程是前台线程。线程池中的线程总是后台线程。 // 用Thread类创建线程的时候&#xff0c;可以设置IsBackground属性&#xff0c;表示一个后台线程。 // 前台线程在主函数运行结束后依旧执行&#xff0c;后台线…

GNS3的使用

一、实验目的&#xff1a; 了解GNS3的使用方法&#xff0c;能够用GN3建立和模拟网络模型&#xff0c;并且将GNS3关联wireshark&#xff0c;进行抓包 二、预备知识和主要步骤&#xff1a; GNS3就是一个可以构建虚拟网络的软件 1&#xff0e;熟悉GNS3的界面&#xff0c;了解按键…

C#_多线程编程入门

字面理解&#xff1a;多个线程同时工作的过程。 案例① 单线程 #region ① 单线程做菜/// <summary>/// ① 单线程做菜:执行任务时,什么操作都动不了./// </summary>/// <param name"sender"></param>/// <param name"e">…

只需半分钟,ARMS 帮你配置出“高质量”告警

作者&#xff1a;图杨 背景 某位资深运维工程师A&#xff1a;“一天不收个几十条告警&#xff0c;我都觉得心里不踏实” 。运维工程师B&#xff1a;“我那几个告警天天告&#xff0c;我的应用一点问题都没有&#xff0c;但是我又不敢关”。运维工程师C&#xff1a;“我每天都…

安果天气预报 产品介绍

软件介绍版本号 2.0.5 安果天气预报&#xff1a;全世界覆盖&#xff0c;中国定制 想要查找北京、上海、纽约、东京还是巴黎的天气&#xff1f;一款简约的天气预 报应用为你呈现。专注于为用户提供纯净的天气体验&#xff0c;我们不发送任何打扰的通知。包含空气质量、能见度、…

使用Python搭建服务器公网展示本地电脑文件

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有…

搜索树基础:二叉搜索树(详解特性用途,图解实现过程)

二叉搜索树 二叉搜索树的特性二叉搜索树的主要用途二叉搜索树的基本操作1、二叉搜索树的查找2、二叉搜索树的插入3、二叉搜索树的删除&#xff08;难点&#xff09;&#xff08;1&#xff09;找到待删结点&#xff08;2&#xff09;分情况删除 二叉搜索树的特性 二叉搜索树又称…

如何高效沟通避免沟通冲突 ?2大沟通漏斗模型

“昨天&#xff0c;我不是说这个Bug了&#xff1f;”“没有啊&#xff0c;你啥时候说的&#xff1f;”项目组成员沟通效率不高&#xff0c;往往造成沟通误解、争论不休&#xff0c;甚至出现沟通冲突&#xff0c;影响项目进度。 那么该如何提高沟通效率&#xff0c;避免不必要的…

Fmoc-D-Ser(Ac4-L-Manα)-OH主要采用的是Fmoc合成法,Fmoc合成法是以Fmoc为α-氨基的保护基

Fmoc-D-Ser(Ac4-L-Manα)-OH主要采用的是Fmoc合成法。Fmoc合成法是以Fmoc为α-氨基的保护基&#xff0c;配合侧链保护的苄醇类&#xff0c;完成多肽合成。 在西安凯新生物科技有限公司的Fmoc合成法的实施过程中&#xff0c;首先将一个Fmoc&#xff0d;氨基酸衍生物共价交联到树…

老师们如何轻松制作学生分班查询系统

当暑假即将结束&#xff0c;老师们面临着许多事务&#xff0c;其中一个重要的任务是制作分班信息查询系统。这个工具对于老师们来说非常重要&#xff0c;因为它可以提供给家长和学生们方便快捷的查询服务。 分班信息查询系统可以让家长和学生们通过系统查询自己所在的班级、同班…

如何快捷发布学生分班情况

暑假即将结束&#xff0c;老师们面临着许多事务&#xff0c;其中一个重要的任务是制作分班信息查询系统。这个工具对于老师们来说非常重要&#xff0c;因为它可以提供给家长和学生们方便快捷的查询服务。 分班信息查询系统可以让家长和学生们通过系统查询自己所在的班级、同班同…

MySQL每日一练--校园教务系统

一丶数据库名称&#xff1a;SchoolDB 二丶数据库表信息&#xff1a;角色信息表 表名&#xff1a; t_role 主键&#xff1a; r_id 序号 字段名称 字段说明 类别 位数 属性 备注 1 r_id 角色编号 int 主键 自动增长 2 r_name_EN 角色名&#xff08;英文…

CPU内部单总线方式——例题分析

指令&#xff1a;ADD &#xff08;R0&#xff09;,R1 &#xff08;R0&#xff09; 目的操作数 &#xff08;R0&#xff09;说明R0中存放的是目的操作数的地址&#xff0c;则需要一次间接寻址 R1 源操作数 直接存在了R1寄存器中 最后&#xff08;R0&#xff09;存入R0所指向的存…

能源行业配电柜监控,这也太智能了!

在能源行业中&#xff0c;配电柜作为能量传输和控制的关键枢纽&#xff0c;其稳定运行直接关系到供电系统的可靠性和安全性。随着技术的不断进步&#xff0c;配电柜监控系统的发展为能源管理带来了全新的可能性。 配电柜监控系统的引入为能源行业带来了更高的智能化水平和管理效…

成集云 | 旺店通多包裹数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着品牌电商兴起&#xff0c;线上线下开始逐渐融为一体&#xff0c;成集云以旺店通ERP系统为例&#xff0c;通过成集云-旺店通连接器&#xff0c;将旺店通ERP系统多包裹数据同步至钉钉实现数据互通&#xff0c;帮助企业解决了电商发货存在的错…