通过率 34% · 提交 1,169 · 通过 394
小慕正在处理一个由多个组成的命令字符串; 1. 字符串长度不超过127字节,只包含大小写字母、数字、下划线和 2. 命令字之间以一个或多个下划线_进行分隔 3. 可以用两个双引号""来标识包含下划线_的命令字或(仅包含两个双引号的命令字),双引号不会出现在命令字内部 小慕需要对指定索引的敏感字段进行加密,将其替换为(6个*),并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字,则输出字符串ERROR。
这类题属于华为 OD 机考真题方向中「100分 / 字符串」方向的高频题型,通常考察对「100分 / 字符串」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
输入为两行 第一行为命令字索引K(从0开始) 第二行为命令字符串S
输出处理后的命令字符串 如果无法找到指定索引的命令字,输出字符串ERROR
示例 1
输入示例
1 password_a12345678_timeout_100
输出示例
password_******_timeout_100
示例 2
输入示例
2 aaa_password_"a12_45678"_timeout_100_""_
输出示例
aaa_password_******_timeout_100_""
"a12_45678"为包含双引号的命令字,需要整体替换。原字符串中末尾的"_"需要删除。
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
本题为纯模拟题。简单理解题意就是,把下划线 `_` 作为分隔符对原字符串进行分割(如果产生空字符串则跳过),将分割后索引为 K(索引从 0 记起)的字符串修改为 ******。
题意中比较难理解的一句话是:
> 可以通过两个双引号 "" 来标识包含下划线 _ 的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现
这句话的意思是,如果某一个下划线 `_` 出现在一对引号内,那么这个下划线不作为分隔符使用。这一点也导致我们不能够直接使用 split() 来处理原字符串,而是需要在一个 for 循环 中来进行字符串的分割。
由于需要考虑某段字符串是否位于一对引号内,我们可以设置一个标志 flag:
flag 为 True 时,说明此时位于一对引号内flag 为 False 时,说明此时不位于一对引号内初始化这个 flag 为 False,并在循环过程中反复切换 flag。
构建一个初始化列表 lst = [""],包含一个空串。lst 用于储存最终的分割结果。
遍历原字符串 s 中的字符 ch,分情况讨论:
lst 中的最后一个字符串 lst[-1] 即可ch 延长进 lst[-1],同时修改 flag = not flag,因为接下来的字符是否位于一对引号中的状态切换了flag 的值:flag = True:说明此时的下划线位于一对引号中,不作为分隔符使用。下划线的行为和普通字母或数字没有区别,直接延长进 lst[-1]flag = False:说明此时下划线作为分隔符使用。此时 lst 中的最后一个字符串将不再延长,后续的字符串会另起一个新的字符串,因此我们在 lst 末尾加入一个新的空串 "",来储存后续的字符遍历结束后,由于原字符串 s 中可能存在一些连续的下划线 _,lst 中可能会存在一些空串,我们需要对这些空串进行去重操作。直接使用以下代码即可完成:
最终,我们选择答案列表 ans 中的第 K 个元素,将其修改为 ****** 后并输出。注意此处还需要判断 ans 的长度,如果小于等于 K 的话,说明索引 K 越界,输出 ERROR。
复杂度分析 设 L 为输入字符串 s 的长度(题目约定不超过 127 字节)。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有