0925. 长按键入
大约 2 分钟
0925. 长按键入
- 标签:双指针、字符串
- 难度:简单
题目链接
题目大意
描述:你的朋友正在使用键盘输入他的名字 。偶尔,在键入字符时,按键可能会被长按,而字符可能被输入 次或多次。
现在给定代表名字的字符串 ,以及实际输入的字符串 。
要求:检查键盘输入的字符 。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),就返回 True
。否则返回 False
。
说明:
- 。
- 和 的字符都是小写字母。
示例:
- 示例 1:
输入:name = "alex", typed = "aaleex"
输出:true
解释:'alex' 中的 'a' 和 'e' 被长按。
- 示例 2:
输入:name = "saeed", typed = "ssaaedd"
输出:false
解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。
解题思路
思路 1:分离双指针
这道题目的意思是在 里边匹配 ,同时要考虑字符重复问题,以及不匹配的情况。可以使用分离双指针来做。具体做法如下:
使用两个指针 、, 指向字符串 开始位置, 指向字符串 开始位置。
如果 ,则将 、 同时右移。
如果 ,则:
- 如果 和前一个位置元素 相等,则说明出现了重复元素,将 右移,过滤重复元素。
- 如果 和前一个位置元素 不等,则说明出现了多余元素,不匹配。直接返回
False
即可。
当 或者 时跳出循环。然后过滤掉 末尾的重复元素。
最后判断,如果 并且 ,则说明匹配,返回
True
,否则返回False
。
思路 1:代码
class Solution:
def isLongPressedName(self, name: str, typed: str) -> bool:
left_1, left_2 = 0, 0
while left_1 < len(name) and left_2 < len(typed):
if name[left_1] == typed[left_2]:
left_1 += 1
left_2 += 1
elif left_2 > 0 and typed[left_2 - 1] == typed[left_2]:
left_2 += 1
else:
return False
while 0 < left_2 < len(typed) and typed[left_2] == typed[left_2 - 1]:
left_2 += 1
if left_1 == len(name) and left_2 == len(typed):
return True
else:
return False
思路 1:复杂度分析
- 时间复杂度:。其中 、 分别为字符串 、 的长度。
- 空间复杂度:。