失灵的键盘2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述有一个键盘有 2个按键失灵了按下这些键时会连续输出其他键对应的字符两次。具体如下按下 j 键一次屏幕上显示 u(两个连续的 u )按下 b键一次屏幕上显示 t(两个连续的 tu键和 t键是好的按下 u键一次时屏幕只会显示一次 u(正常按键)按下 t键一次时屏幕只会显示一次 t (正常按键)假定屏幕上连续显示两个 t 一定是按了一次 b 键而不是两次 t键假定按键 t之后不会紧接着按键 b即 tttt转义为两个 b而不可能是 tbtu和 j同样适用该规则其它按键也都正常工作为了方便维修给定一串屏幕上输出的字符串维修师傅要求按照按键次数降序输出次数相同的按键按照对应字符的升序排序(失灵按键以原对应字符来排序)只统计按键次数大于 0的按键。同时维修师傅要求输出时需要进行一次转义(字符映射)规则如下按键 0 ~ 9直接以数字 0 ~ 9 进行输出按键 a~ z以 10~ 35 进行输出2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型输入描述一个字符串s只包含小写字母和数字ss的长度不超过 500(s 中不包含 b和 j字母)补充按键范围只包括:数字 0 ~ 9和小写字母 a ~ z 且不包含b和j。输出描述按键转义后的值按键次数构成结果对所有按键的结果对按照按键次数降序排列。示例1输入t输出29:1说明单个字符→按了 t 键t键转义为 29示例2输入uuuua输出19:2 10:1说明uuuu匹配为两个jja一个解题思路核心思想题目描述中指出失灵的j键会输出连续的uu失灵的b键会输出连续的tt。而且因为u和j、t和b的转义规则输入字符串中每出现一次连续的uu就意味着按了一次j每出现一次连续的tt就意味着按了一次b。 因此我们可以直接将字符串中所有的uu替换为j将所有的tt替换为b。替换后的字符串就完美反映了按键的实际过程。随后我们需要统计各个字符出现的频率并进行排序和转义输出。 排序规则如下 1. 首先按照按键次数降序排序。 2. 次数相同时按照按键对应的字符 ASCII 码升序排序失灵按键b和j的对应字符也就是b和j本身。最后根据题目给定的映射规则 - 数字0 ~ 9映射为0 ~ 9 - 小写字母a ~ z映射为10 ~ 35即字符的 ASCII 值 - a的 ASCII 值 10。复杂度分析时间复杂度$O(N \log N)$其中 $N$ 是字符串的长度。字符串替换操作时间复杂度为 $O(N)$统计频次为 $O(N)$最后对不超过 36 种字符进行排序的时间复杂度为 $O(C \log C)$ (C36)因此总体时间复杂度极低接近 $O(N)$。空间复杂度$O(N)$用于存储替换后的字符串以及哈希表
4.15华为OD机试真题 新系统 - 失灵的键盘 (JavaPyCC++JsGo)
发布时间:2026/7/8 7:19:16
失灵的键盘2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述有一个键盘有 2个按键失灵了按下这些键时会连续输出其他键对应的字符两次。具体如下按下 j 键一次屏幕上显示 u(两个连续的 u )按下 b键一次屏幕上显示 t(两个连续的 tu键和 t键是好的按下 u键一次时屏幕只会显示一次 u(正常按键)按下 t键一次时屏幕只会显示一次 t (正常按键)假定屏幕上连续显示两个 t 一定是按了一次 b 键而不是两次 t键假定按键 t之后不会紧接着按键 b即 tttt转义为两个 b而不可能是 tbtu和 j同样适用该规则其它按键也都正常工作为了方便维修给定一串屏幕上输出的字符串维修师傅要求按照按键次数降序输出次数相同的按键按照对应字符的升序排序(失灵按键以原对应字符来排序)只统计按键次数大于 0的按键。同时维修师傅要求输出时需要进行一次转义(字符映射)规则如下按键 0 ~ 9直接以数字 0 ~ 9 进行输出按键 a~ z以 10~ 35 进行输出2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型输入描述一个字符串s只包含小写字母和数字ss的长度不超过 500(s 中不包含 b和 j字母)补充按键范围只包括:数字 0 ~ 9和小写字母 a ~ z 且不包含b和j。输出描述按键转义后的值按键次数构成结果对所有按键的结果对按照按键次数降序排列。示例1输入t输出29:1说明单个字符→按了 t 键t键转义为 29示例2输入uuuua输出19:2 10:1说明uuuu匹配为两个jja一个解题思路核心思想题目描述中指出失灵的j键会输出连续的uu失灵的b键会输出连续的tt。而且因为u和j、t和b的转义规则输入字符串中每出现一次连续的uu就意味着按了一次j每出现一次连续的tt就意味着按了一次b。 因此我们可以直接将字符串中所有的uu替换为j将所有的tt替换为b。替换后的字符串就完美反映了按键的实际过程。随后我们需要统计各个字符出现的频率并进行排序和转义输出。 排序规则如下 1. 首先按照按键次数降序排序。 2. 次数相同时按照按键对应的字符 ASCII 码升序排序失灵按键b和j的对应字符也就是b和j本身。最后根据题目给定的映射规则 - 数字0 ~ 9映射为0 ~ 9 - 小写字母a ~ z映射为10 ~ 35即字符的 ASCII 值 - a的 ASCII 值 10。复杂度分析时间复杂度$O(N \log N)$其中 $N$ 是字符串的长度。字符串替换操作时间复杂度为 $O(N)$统计频次为 $O(N)$最后对不超过 36 种字符进行排序的时间复杂度为 $O(C \log C)$ (C36)因此总体时间复杂度极低接近 $O(N)$。空间复杂度$O(N)$用于存储替换后的字符串以及哈希表