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