目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给一个字符串,表示用","分开的人名。
然后给定一个字符串,进行快速人名查找,符合要求的输出。
快速人名查找要求:人名的每个单词的连续前几位能组成给定字符串,一定要用到每个单词。
二、输入描述
第一行是人名,用“,”分开的人名 第二行是查找字符串。
三、输出描述
输出满足要求的人名。
四、解题思路
深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(n)。
- 第一行输入人名,逗号隔开;
- 通过java8 Stream表达式(简洁/方便/上档次)快速拆解输入行;
- 输入查找字符串find;
- 深度优先搜索算法dfs,遍历人名list;
- name和find开始匹配,name消耗多个find;
- 首字母匹配,那么直接进行下一个匹配;
- 输出满足要求的人名。
五、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消耗多个findint 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在线答疑。