匹配命令行前缀关键字

2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

给定一组命令行字符串和一个命令前缀,需要找出所有以该前缀开头的命令行表达式中,前缀之后的第一个关键字,并将这些关键字按字典序排序后返回。

如果找不到相匹配的前缀则返回空,匹配多个相同关键字仅返回一个即可。

示例 1:给定的命令行表达式为 ["display device","display port status"], 输入前缀是 "display", 则返回 ["device","port"]

示例 2:给定的命令行表达式为 ["set negotiation mode ","set port down"], 输入前缀是 "", 则返回 ["set"]

示例 3:给定的命令行表达式为 ["git commit -m message","git push origin master", "git pull"], 输入前缀是 "git ", 则返回 ["commit","pull","push"]

输入描述

1、命令行条数 0~1000 条,每个命令行的长度为 [1,200]。

2、每个命令行表达式中的关键字均由小写字母 、_ 或 - 组成。

3、命令行关键字不包含空格,命令行中的字段有空格进行间隔。

4、仅命令关键字之间的空格有意义,字符串开始或结尾的空格需要忽略, 如 " " 等价于 "", "a b " 等价于 "a b"

输出描述

示例1

输入

["display port status", "display device "],"display"

输出

["device","port"]

说明

每个命令行都和前缀 "display" 匹配,则返回每个命令的第二个关键字

示例2

输入

["set negotiation mode ", "set port down"],""

输出

["set"]

说明

首先匹配 "" 的命令关键字为 2 个 "set", 去重后返回 1 个 "set"

示例3

输入

[],"test"

输出

[]

说明

输入命令行列表为空

示例4

输入

["ttttt"],"sssss"

输出

[]

说明

前缀匹配没找到

解题思路

核心思想

本题要求从一组命令行表达式中找出以特定前缀开头的命令,并提取前缀之后的第一个关键字。

  1. 输入解析:输入格式通常为 ["cmd1", "cmd2", ...],"prefix"。需要正确解析出命令列表和前缀字符串。
  2. 命令匹配与关键字提取
    • 遍历每个命令行表达式。
    • 去除命令行首尾的空格。
    • 判断命令行是否以指定前缀开头。
    • 如果匹配,截取前缀之后的部分。
    • 去除剩余部分首尾的空格。
    • 如果剩余部分不为空,则截取其中的第一个单词(即到第一个空格为止的部分)。
  3. 去重与排序
    • 使用 Set(如 Java 的 TreeSet)来存储提取出的关键字,以自动实现去重和字典序排序。
  4. 结果输出:将排序后的唯一关键字列表按要求的格式输出。

复杂度分析

  • 时间复杂度:$O(N \times L + K \log K)$,其中 $N$ 是命令行数量,$L$ 是命令行平均长度,$K$ 是提取出的不重复关键字数量。遍历和匹配需要 $O(N \times L)$,排序需要 $O(K \log K)$。
  • 空间复杂度:$O(N \times L)$,用于存储输入的命令列表和提取出的关键字。
THE END