华为OD机试真题 新系统 - 配置操作失败数量统计 (JavaPyCC++JsGo)

2 阅读3分钟

配置操作失败数量统计

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 之间,操作、属性之间都用空格进行分割。

  1. 在进行所有操作时,如果缺少关键字,或者相应的 rule_id、rule_index的取值不符合要求,则操作失败。
  2. 在进行添加操作时,参数必须包含 rule_id 和 rule_index,如果当前不存在,则添加成功,如果添加已经存在的 rule_id,则操作失败。
  3. 在进行修改操作时,参数必须包含rule_id和rule_index,如果当前rule_id不存在,或前后rule_index没有变化,则操作失败。
  4. 在进行删除操作时,参数必须包含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)。

  1. 指令解析:遍历所有的 token,当遇到关键字 add_rulemod_ruledel_rule 时,说明开始了一条新指令。后续的形如 k=vv 是纯数字的 token 就是该指令的参数。
  2. 状态维护:使用一个哈希表(或字典)rules 来维护当前系统中所有的规则,键为 rule_id,值为 rule_index
  3. 指令校验执行:对于每一条解析出的指令和参数:
    • add_rule:检查是否包含 rule_idrule_index,检查二者是否在 199991 \sim 9999 范围内,检查该 rule_id 是否已经存在。如果不满足任意条件,则视为失败(fail_count++),否则添加到哈希表中。
    • mod_rule:检查是否包含 rule_idrule_index,检查二者是否在 199991 \sim 9999 范围内,检查该 rule_id 是否已经存在,并检查修改后的 rule_index 是否与原来不同。如果均满足则更新,否则失败。
    • del_rule:检查是否包含 rule_id,检查其范围,检查是否已存在于系统中。满足则从哈希表中删除,否则失败。
  4. 最后输出 fail_count

复杂度分析

  • 时间复杂度O(N)O(N),其中 NN 为输入的单词/token 的数量。我们只需要一次遍历提取所有的指令,然后再一次遍历执行它们,每次执行由于使用哈希表,时间开销是 O(1)O(1)
  • 空间复杂度O(N)O(N),用于存储指令和当前已配置的规则状态哈希表,最多存储不超过指令数量的规则。