这题本质上是一次线性扫描 + 贪心判断。
因为题目已经明确规定:
u 一定表示按了 1 次 jt 一定表示按了 1 次 bu 后紧跟 j、t 后紧跟 b 这种会造成歧义的情况有一个键盘有 2 个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下:
-按下 j 键一次,屏幕上显示 uu (两个连续的 u );按下 b 键一次,屏幕上显示 tt(两个连续的 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 ,只包含小写字母和数字,s 的长度不超过 500(s 中不包含 b 和 j 字母)
{按键转义后的值,按键次数}构成结果对,所有按键的结果对按照按键次数降序排列(输出实际是二维数组,第二维固定长度 2 )。
按键范围只包括:小写字母 a ~ z 和数字 0 ~ 9 。
转义表:
'0'->0, '1'->1,...,'9'->9
'a'-> 10,'b'-> 11,...,'z'-> 35
输入
"t"
输出
[[29,1]]
说明
处理过程:
-单个字符→按了 t 键
t 键转义为 29
输入
"uuuua"
输出
[[19,2],[10,1]]
说明
处理过程:
第 1−2 字符 "uu"→匹配"uu"模式→按了 j 键(不是 $$ 键!)
第 3−4 字符 "uu"→匹配"uu"模式→按了 j 键(不是 u 键!)
第 5 字符 "a" →单个字符→按了 a 键
j 键转义为 19,a 键转义为 10
注意:题目约束了,u 键之后不会紧跟着 j 键,因此不可能是 u−>j−>u