当前位置: 首页 > 面试经验 >

2024华为OD机试真题 - 快速人名查找 JAVA代码

优质
小牛编辑
82浏览
2024-08-14

2024华为OD机试真题 - 快速人名查找 JAVA代码

2024华为OD机试真题,代码包含语言java 代码基本都有详细注释。

题目描述

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

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

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

输入描述

第一行是人名,用’,’分开的人名

第二行是 查找字符串

输出描述

输出满足要求的人名

用例

输入

zhang san,zhang san san

zs

输出

zhang san

描述

输入

zhang san san,zhang an sa,zhang hang,zhang seng,zhang sen a

zhas

输出

zhang an sa,zhang seng

描述

声明

上述内容部分整理自考生的真实反馈以及网络资源的搜集,我们始终尊重原作者的权益。如若发现任何内容侵犯了您的版权,敬请及时与我们取得联系,我们将立即进行删除处理。

此外,本材料后续的解析与代码部分均为我方原创思考与分析,凝聚了我们的心血与智慧。我们恳请各位尊重原创,切勿随意搬运或抄袭,共同维护良好的学术与创作环境。谢谢!

订阅后可看完整内容,试看真题如下:

华为OD机试真题 - 剩余银饰的重量 (D卷,100分)

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

题目解析

首先,我们需要理解题目的输入和输出要求。题目提供了两行输入,第一行是多个用逗号分隔的人名,第二行是待查找的字符串。我们的目标是找出那些人名,其每个单词的连续前几位能够组成给定的查找字符串,并且必须用到每个单词的至少一部分。

接下来,我们可以按照以下步骤进行解题:

  1. 读取并分割人名:读取第一行输入,使用逗号作为分隔符,将人名分割成一个列表或数组。
  2. 遍历人名列表:对于人名列表中的每一个单词,我们需要进行查找和匹配操作。
  3. 查找和匹配:对于每个人名单词,我们需要检查它是否包含在给定的查找字符串中,并且这个单词的起始位置之前和之后都不能有其他字符(即该单词必须是查找字符串的连续部分)。
  4. 输出匹配的人名:如果某个单词满足上述条件,即它是查找字符串的连续部分,并且没有与其他单词重叠,我们就将其输出。需要注意的是,由于题目要求用到每个单词,因此我们需要确保所有单词都被匹配到,并且每个单词只被使用一次。
  5. 处理特殊情况:如果某个单词在查找字符串中出现了多次,我们需要确保每次匹配都是独立的,即不会与其他单词的匹配产生重叠。
  6. 输出结果:最后,将所有满足条件的人名按照题目要求的格式输出。

Java算法源码

import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringJoiner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] namea = sc.nextLine().split(",");
        String abbr = sc.nextLine();

        System.out.println(getResult(namea, abbr));
    }

    public static String getResult(String[] namea, String abbr) {
        ArrayList<String> ana = new ArrayList<>();

        for (String name : namea) {
            String[] parts = name.split(" ");

            if (parts.length > abbr.length()) continue;

            if (recursive(parts, 0, abbr, 0)) {
                ana.add(name);
            }
        }

        return String.join(",", ana);
    }

    public static boolean recursive(String[] parts, int parts_index, String abbr, int abbr_index) {
        if (abbr_index >= abbr.length()) {
            return parts_index >= parts.length;
        }

        if (parts_index >= parts.length) {
            return false;
        }

        String part_name = parts[parts_index];

        for (int j = 0; j < part_name.length(); j++) {
            if (abbr_index < abbr.length() && part_name.charAt(j) == abbr.charAt(abbr_index)) {
                if (recursive(parts, parts_index + 1, abbr, ++abbr_index)) {
                    return true;
                }
            } else {
                return false;
            }
        }

        return false;
    }
}

#华为od##华为od题库##华为##华为OD##华为OD机试真题#
 类似资料: