0925. 长按键入 #
- 标签:双指针、字符串
- 难度:简单
题目大意 #
你的朋友正在使用键盘输入他的名字 name
。偶尔,在键入字符时,按键可能会被长按,而字符可能被输入 1
次或多次。
现在给定代表名字的字符串 name
,以及实际输入的字符串 typed
。
要求:检查键盘输入的字符 typed
。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),就返回 True
。否则返回 False
。
解题思路 #
这道题目的意思是在 typed
里边匹配 name
,同时要考虑字符重复问题,以及不匹配的情况。可以使用分离双指针来做。具体做法如下:
- 使用两个指针
left_1
、left_2
,left_1
指向字符串name
开始位置,left_2
指向字符串type
开始位置。 - 如果
name[left_1]
等于name[left_2]
,则将left_1
、left_2
同时右移。 - 如果
nmae[left_1]
不等于name[left_2]
,则:- 如果
typed[left_2]
和前一个位置元素typed[left_2 - 1]
相等,则说明出现了重复元素,将left_2
右移,过滤重复元素。 - 如果
typed[left_2]
和前一个位置元素typed[left_2 - 1]
不等,则说明出现了多余元素,不匹配。直接返回False
即可。
- 如果
- 当
left_1 == len(name)
或left_2 == len(typed)
时跳出循环。然后过滤掉typed
末尾的重复元素。 - 最后判断,如果
left_1 == len(name)
并且left_2 == len(typed)
,则说明匹配,返回True
,否则返回False
。
代码 #
|
|