匹配命令行前缀关键字
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"
输出
[]
说明
前缀匹配没找到
解题思路
核心思想
本题要求从一组命令行表达式中找出以特定前缀开头的命令,并提取前缀之后的第一个关键字。
- 输入解析:输入格式通常为
["cmd1", "cmd2", ...],"prefix"。需要正确解析出命令列表和前缀字符串。 - 命令匹配与关键字提取:
- 遍历每个命令行表达式。
- 去除命令行首尾的空格。
- 判断命令行是否以指定前缀开头。
- 如果匹配,截取前缀之后的部分。
- 去除剩余部分首尾的空格。
- 如果剩余部分不为空,则截取其中的第一个单词(即到第一个空格为止的部分)。
- 去重与排序:
- 使用
Set(如 Java 的TreeSet)来存储提取出的关键字,以自动实现去重和字典序排序。
- 使用
- 结果输出:将排序后的唯一关键字列表按要求的格式输出。
复杂度分析
- 时间复杂度:$O(N \times L + K \log K)$,其中 $N$ 是命令行数量,$L$ 是命令行平均长度,$K$ 是提取出的不重复关键字数量。遍历和匹配需要 $O(N \times L)$,排序需要 $O(K \log K)$。
- 空间复杂度:$O(N \times L)$,用于存储输入的命令列表和提取出的关键字。