华为OD机试 - 快速人名查找 - 深度优先搜索dfs(Java 2023 B卷 200分)

news2024/7/6 17:34:40

在这里插入图片描述

目录

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

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

专栏导读

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

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

一、题目描述

给一个字符串,表示用","分开的人名。

然后给定一个字符串,进行快速人名查找,符合要求的输出。

快速人名查找要求:人名的每个单词的连续前几位能组成给定字符串,一定要用到每个单词。

二、输入描述

第一行是人名,用“,”分开的人名 第二行是查找字符串。

三、输出描述

输出满足要求的人名。

四、解题思路

深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(n)。

  1. 第一行输入人名,逗号隔开;
  2. 通过java8 Stream表达式(简洁/方便/上档次)快速拆解输入行;
  3. 输入查找字符串find;
  4. 深度优先搜索算法dfs,遍历人名list;
  5. name和find开始匹配,name消耗多个find;
  6. 首字母匹配,那么直接进行下一个匹配;
  7. 输出满足要求的人名。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<String> names = Arrays.asList(sc.nextLine().split(","));
        // 查找字符串
        String find = sc.next();
        String ret = "";
        for (String name : names) {
            List<String> list = Arrays.asList(name.split(" "));
            if (dfs(list, 0, find, 0)) {
                ret = ret.isEmpty() ? name : ret + "," + name;
            }
        }
        System.out.println(ret);
    }

    /**
     * 深度优先搜索算法dfs
     * @param list 人名集合
     * @param nameIndex 人名序号index
     * @param find 查找字符串
     * @param findIndex 查找字符串的每一个字符index
     * @return
     */
    public static boolean dfs(List<String> list, int nameIndex, String find, int findIndex) {
        // 是否搜索完毕
        if (nameIndex == list.size() || findIndex == find.length()) {
            return (nameIndex == list.size() && findIndex == find.length());
        }

        // 进行当前比较的人名
        String name = list.get(nameIndex);

        // 首字母不匹配,直接退出
        if (name.charAt(0) != find.charAt(findIndex)) {
            return false;
        }

        // name和find开始匹配,name消耗多个find
        int cnt = 1;
        while (cnt < name.length() && findIndex + cnt < find.length() && name.charAt(cnt) == find.charAt(findIndex + cnt)) {
            if (dfs(list, nameIndex + 1, find, findIndex + cnt + 1)) {
                return true;
            }
            cnt++;
        }

        // 首字母匹配,那么直接进行下一个匹配
        return dfs(list, nameIndex + 1, find, findIndex + 1);
    }
}

六、效果展示

1、输入

nezha soft,nezha soft java,nezha soso
ns

2、输出

nezha soft,nezha soso

3、说明

nezha soft,nezha soso的第一个字母和ns匹配。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

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

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

在这里插入图片描述

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

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

相关文章

天津大数据培训学校 大数据可从事的行业

大数据行业近年来呈现出爆炸式的增长态势&#xff0c;各行各业都越来越依赖数据来指导业务决策和创新发展&#xff0c;因此&#xff0c;大数据专业人才的需求也随之增长。这种行业需求的增长为大数据就业提供了良好的机会&#xff0c;尤其是对于具备相关技能和知识的人来说。 …

KT142C-sop16语音芯片9600串口uart命令如何测试_详细说明

KT142C是一个提供串口的SOP16语音芯片&#xff0c;完美的集成了MP3的硬解码。内置330KByte的空间&#xff0c;最大支持330秒的语音长度&#xff0c;支持多段语音&#xff0c;支持直驱0.5W的扬声器无需外置功放 串口测试的软件截图如下&#xff1a; 7E 3F 00 02 00 04 EF--- 代…

第五章 Linux常用应用软件

第五章 Linux常用应用软件 ​ Ubuntu包含了日常所需的常用程序&#xff0c;集成了跨平台的办公套件LibreOffice和Mozila Firefox浏览器等。还提供了文本处理工具、图片处理工具等。 1.LibreOffice ​ LibreOffice免费开源&#xff0c;遵照GPL分发源代码&#xff0c;与OpenOf…

oauth2 授权模式 - 第三方登录

Oauth2 OAuth 2.0 是目前最流行的授权机制&#xff0c;用来授权第三方应用&#xff0c;获取用户数据。 OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的规范标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息&#xff08;如用户…

3D WEB轻量化引擎HOOPS Commuicator技术概览(一):数据导入与加载

HOOPS Communicator是一款功能强大的SDK&#xff0c;适用于基于Web的高级工程应用程序&#xff0c;代表HOOPS Web平台的Web开发组件。使用HOOPS Communicator&#xff0c;您可以构建一个在 Web浏览器中提供3D模型的Web应用程序。 HOOPS Communicator可以本地加载多种模型格式。…

GO语言篇之CGO

GO语言篇之CGO 文章目录 GO语言篇之CGO前言C代码嵌入GO代码C文件嵌入GO代码缺点 前言 Go语言可以通过内置的CGO调用C语言接口&#xff0c;从而实现C语言代码的交互&#xff0c;CGO提供了一种将Go代码嵌入到C代码中&#xff0c;或者从Go代码中调用C函数的方法 C代码嵌入GO代码…

ThreadPoolExecutor

官方API解释线程池的好处&#xff1a; &#xff08;1&#xff09;通过重用线程池中的线程&#xff0c;来减少每个线程创建和销毁的性能开销。 &#xff08;2&#xff09;对线程进行一些维护和管理&#xff0c;比如定时开始&#xff0c;周期执行&#xff0c;并发数控制等等。 …

DNS (Domain Name System) 域名解析过程

一、域名与IP地址 通常情况下一台电脑都会有一个IPv4和IPv6地址&#xff08;由数字和字母组成&#xff0c;难以记忆&#xff09;&#xff0c;所以日常访问网站时我们通常都是采用输入域名&#xff08;方便记忆&#xff09;的方式来访问。 二、域名结构树 www 主机名bilibil…

HP惠普暗影精灵8P笔记本OMEN 17.3 英寸游戏本 17-ck1000(509V8AV)原厂Win11系统22H2

适用型号&#xff1a; 17-ck1000TX、17-ck1001TX、17-ck1002TX、17-ck1003TX、17-ck1004TX、17-ck1006TX、17-ck1007TX、17-ck1008TX 原装出厂系统自带所有驱动、出厂主题壁纸、Office办公软件、MyHP、惠普电脑管家、OMEN Command Center等预装程序 链接&#xff1a;https:/…

思科的简易配置

vlan 划分配置 1. 拓扑连接 2. 终端设备配置&#xff0c;vlan(v2, v3)配置&#xff0c;模式设置 然后设置交换机 fa 0/5 口为 trunk 模式&#xff0c;使得不同交换机同一 vlan 下 PC 可以互连 3.测试配置结果 用 ip 地址为 192.168.1.1 的主机(PC0)向同一 vlan(v2)下的 192.…

C高级 Linux中的文件相关指令

一、使用cut截取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割 grep "ubuntu" /etc/passwd | cut -d "/" -n -f 2-3 | cut -c 1-11 二、思维导图 文件相关指令&#xff1a;

LayoutManager布局管理器

https://www.yuque.com/huangzhanqi/rhwoir/qdov2ax7lgeowyb4 之前&#xff0c;我们介绍了Component中有一个方法 setBounds() 可以设置当前容器的位置和大小&#xff0c;但是我们需要明确一件事&#xff0c;如果我们手动的为组件设置位置和大小的话&#xff0c;就会造成程序的…

免费敏捷看板工具做—用户反馈流程管理

一个产品在面向市场之后势必会收到来自各个渠道的用户反馈。好的反馈有利于公司品牌的建立&#xff0c;挑剔和负面反馈可以帮助我们了解到用户最真是的需求和使用场景&#xff0c;有利于优化产品提高服务。更加能够提升用户的粘性。 在进行用户反馈管理时&#xff0c;用户反馈…

芯片设计中的ECO是什么?

芯片设计中的ECO是什么&#xff1f;-腾讯云开发者社区-腾讯云 如标题所写&#xff0c;我们今天聊一聊IC设计种的ECO。在展开关于ECO的概念之前&#xff0c;我们先大致捋下数字IC设计的流程&#xff0c;有助于我们后面的讨论。 数字IC设计流程简述 1、确定项目需求 根据市场…

Diffusion-VITS:VITS与Grad-TTS的融合

Grad-TTS的核心思想&#xff1a;把diffusion当做一个postnet&#xff08;或者Plug-In&#xff09;用于特征增强。因此&#xff0c;它可以是一种通用模块应用于任何网络中&#xff0c;典型的作为FastSpeech2的后处理模块。这里&#xff0c;作者以VITS的SVC场景为例&#xff0c;提…

【LeetCode刷题篇零】一些基础算法知识和前置技能(上)

排序算法 O(N^2)的排序算法&#xff1a;冒泡、选择、插入 冒泡排序 冒泡的核心是两两比较&#xff0c;大数下沉&#xff0c;小数上浮&#xff0c;比较的轮数是数组的长度 N&#xff0c;每一轮比较的次数为 N - 当前轮的索引&#xff1a; 外层循环控制轮数 round: [1&#xf…

Python之线程(二)

一、线程同步和互斥锁 同一个资源,多人想用?排队啊! 现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题。 比如:教室里,只有一台电脑,多个人都想使用。天然的解决办法就是,在电脑旁边,大家排队。前一人使用完后,后一人再使用。再比如,上厕所排队。 二、线…

ABB机器人6700系列更换SMB电池的具体方法和步骤

ABB机器人6700系列更换SMB电池的具体方法和步骤 前提: 当需要更换电池时,会显示低电量警告“38213 Battery charge low(电池电量低)” 注意事项: 为了避免机器人不同步,在保持机器人控制柜上电的情况下进行电池的更换,否则可能会导致机器人丢失位置数据。 SMB电池的具体…

AP2813平均电流型双路降压恒流驱动器

产品描述 AP2813 是一款双路降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出功率可达12W&#xff0c;电流 1.2A。AP2813 一路直亮&#xff0c;另外一路通过 MODE1 切换全亮&#xff0c;爆闪。AP281…

ERP辅助报价助力提高效率和准确性

一、ERP辅助报价的定义&#xff1a; ERP辅助报价是指通过企业资源计划系统提供的功能和工具&#xff0c;辅助企业进行报价流程的管理和执行。它涵盖了报价数据的收集、计算、分析和生成报价文件的全过程&#xff0c;以提高报价的准确性、效率和一致性。 二、ERP辅助报价的重要…