通过率 53% · 提交 512 · 通过 269
小慕正在参与《密室逃生》游戏,当前关卡要求找到符合给定密码 K()的箱子,并给出箱子编号,箱子编号为 1~N。 每个箱子中都有一个字符串 s,字符串由大写字母,小写字母,数字,标点符号,空格组成,需要在这些字符串中找出所有的字母,,并返回。 注意:满足条件的箱子不超过 1 个。
这类题属于华为 OD 机考真题方向中「100分 / 2024E」方向的高频题型,通常考察对「100分 / 2024E」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为表示密码 K 的字符串
第二行为一系列箱子 boxes,为字符串数组样式,以空格分隔
箱子 N 数量满足 1<=N<=10000,代表每一个箱子的字符串 s 的长度满足 0 <= s.length <= 50,密码为仅包含小写字母的升序字符串,且不存在重复字母,密码 K 长度满足1 <= K.length <= 26
返回对应箱子编号,如不存在符合要求的密码箱,则返回-1
示例 1
输入示例
abc s,sdf134 A2c4b
输出示例
2
第 2 个箱子中的 Abc,符合密码 abc
示例 2
输入示例
abc s,sdf134 A2c4bd 523[]
输出示例
-1
第 2 个箱子中的 Abcd,与密码不完全匹配,不符合要求。
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
本题思路非常直接。由于密码 K 不包含重复字符,每一个箱子字符串 s 也要做去重处理,因此我们可以直接分别用哈希集合 K_set 和 s_set 来表示密码和箱子字符串。
遍历 boxes 中的每一个字符串 s,并且挑选出其中的所有字母 ch,并做 ch.lower() 即转为小写的处理,再将所有转为小写的字母构建为 s_set,再比较 K_set 和 s_set 是否完全相等即可。
若相等,则该箱子字符串 s 所对应的编号 i + 1(之所以 +1 是因为箱子的编号是从 1 而不是从 0 开始)即为答案。
如果稍微修改本题的条件,即箱子字符串不做去重处理,即 s = "aa" 与 K = "a" 不能匹配,那么应该如何修改代码?
思路展开 代码的主线是:把密码和每个箱子字符串都规约成同一种形态——「去重后的小写字母集合」,然后直接比较相等。
复杂度分析 设箱子个数为 N,所有箱子字符串的总长度为 L,密码长度记为 |K|。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有