你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
示例 1:
输入:name = "alex", typed = "aaleex",输出:true。解释:'alex' 中的 'a' 和 'e' 被长按。
示例 2:
输入:name = "saeed", typed = "ssaaedd",输出:false。解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。
示例 3:
输入:name = "leelee", typed = "lleeelee",输出:true
示例 4:
输入:name = "laiden", typed = "laiden",输出:true。解释:长按名字中的字符并不是必要的。
提示:
1. name.length <= 1000
2. typed.length <= 1000
3. name 和 typed 的字符都是小写字母。
1. Python实现
class Solution: def isLongPressedName(self, name: str, typed: str) -> bool: # 重点是考虑到所有情况!True的前提是最后的 i 索引是 l1。如果 i 的索引是 l1,那么还要看 j 是不是 l2,如果是则返回True,不是则还要看从 j 到 end 的 typed 字符是否都是 typed[j]! i, j = 0, 0 l1 = len(name); l2 = len(typed) while i < l1 and j < l2: if name[i] == typed[j]: i += 1 j += 1 elif typed[j-1] == typed[j]: j += 1 else: return False if i != l1: return False elif j < l2: # if set(list(typed[j : l2])) == set(typed[j]): # 字符串切片和 range() 一样,包含开头,但不包含结尾,即包含 j,不包含 l2! if set(typed[j : l2]) == set(typed[j]): return True else: return False else: return True1. Python中字符串切片类似于 range() 函数,不同于MATLAB中的字符串切片,包含开头,但不包含结尾。
2. 心得:原来字符串也可以直接转换为集合,例如该例中的 if set(typed[j : 12]) == set(typed[j]))。
