该题解采用了双指针方法来比较两个字符串。其中,left_1 指针遍历 name 字符串,left_2 指针遍历 typed 字符串。当两个指针指向的字符相同,两个指针同时向前移动。如果不同,检查当前 typed 中的字符是否与前一个字符相同(表示长按),如果是,则 left_2 向前移动,否则返回 False。在遍历完 name 后,还需要检查 typed 中剩余的字符是否为长按的字符。如果最终 left_1 和 left_2 都能遍历完各自的字符串,则返回 True,表示 typed 可能是 name 的长按形式。
时间复杂度: O(n)
空间复杂度: O(1)
class Solution:
def isLongPressedName(self, name, typed):
left_1, left_2 = 0, 0 # 初始化两个指针,分别指向 name 和 typed 的起始位置
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 # 只移动 typed 的指针
else:
return False # 字符不同且不是长按情况,直接返回 False
while 0 < left_2 < len(typed) and typed[left_2] == typed[left_2 - 1]: # 检查剩余的 typed 是否为长按的字符
left_2 += 1
if left_1 == len(name) and left_2 == len(typed): # 检查是否完整遍历了 name 和 typed
return True
else:
return False