配置操作失败数量统计
2026 华为OD机试真题 4月8日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
模拟一个系统的命令行配置,包含添加、修改、删除三项操作,详情如下:
- 添加操作命令:add_rule rule_id=1 rule_index=18
- 修改操作命令:mod_rule rule_id=1 rule_index=100
- 删除操作命令:del_rule rule_id=1
其中:add_rule、mod_rule、del_rule是操作关键字,rule_id和rule_index是属性关键字且属性取值范围为数字 1 - 9999 之间,操作、属性之间都用空格进行分割。
- 在进行所有操作时,如果缺少关键字,或者相应的 rule_id、rule_index的取值不符合要求,则操作失败。
- 在进行添加操作时,参数必须包含 rule_id 和 rule_index,如果当前不存在,则添加成功,如果添加已经存在的 rule_id,则操作失败。
- 在进行修改操作时,参数必须包含rule_id和rule_index,如果当前rule_id不存在,或前后rule_index没有变化,则操作失败。
- 在进行删除操作时,参数必须包含rule_id,如果当前rule_id不存在,则操作失败
在进行批量操作时,一个命令失败后可以继续下一条命令的操作。现给有一组批量操作的字符串,包括不超过 1000 条连续的操作指令,格式为 [cmd][cmd][cmd],请将字符串解析后按照顺序进入你实现的系统,统计出配置失败的次数。
输入描述
输入命令以空格分割
输出描述
输出失败命令数量
示例1
输入
[add_rule rule_id=1 rule_index=9999][mod_rule rule_id=1 rule_index=10][del_rule rule_id=1]
输出
0
说明
所有操作都成功。
示例2
输入
[add_rule rule_id=1][mod_rule rule_id=1 rule_index=10][del_rule rule_id=1]
输出
3
说明
add操作不包含rule_index,添加失败,后续修改和删除操作,无对应rule_id数据,也会失败。
示例3
输入
[add_rule rule_id=1 rule_index=10000]
输出
1
说明
rule_index超过范围
解题思路
核心思想
本题是一道纯模拟的题目。由于操作指令和参数是通过空格或者换行进行分割的,为了正确地解析每一条命令及其参数,我们可以将所有输入先拆分成一个个词(token)。
- 指令解析:遍历所有的 token,当遇到关键字
add_rule、mod_rule、del_rule时,说明开始了一条新指令。后续的形如k=v且v是纯数字的 token 就是该指令的参数。 - 状态维护:使用一个哈希表(或字典)
rules来维护当前系统中所有的规则,键为rule_id,值为rule_index。 - 指令校验执行:对于每一条解析出的指令和参数:
add_rule:检查是否包含rule_id和rule_index,检查二者是否在 范围内,检查该rule_id是否已经存在。如果不满足任意条件,则视为失败(fail_count++),否则添加到哈希表中。mod_rule:检查是否包含rule_id和rule_index,检查二者是否在 范围内,检查该rule_id是否已经存在,并检查修改后的rule_index是否与原来不同。如果均满足则更新,否则失败。del_rule:检查是否包含rule_id,检查其范围,检查是否已存在于系统中。满足则从哈希表中删除,否则失败。
- 最后输出
fail_count。
复杂度分析
- 时间复杂度:,其中 为输入的单词/token 的数量。我们只需要一次遍历提取所有的指令,然后再一次遍历执行它们,每次执行由于使用哈希表,时间开销是 。
- 空间复杂度:,用于存储指令和当前已配置的规则状态哈希表,最多存储不超过指令数量的规则。