目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、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消耗多个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在线答疑。