题目如下:
Your friend is typing his
name
into a keyboard. Sometimes, when typing a characterc
, the key might get long pressed, and the character will be typed 1 or more times.You examine the
typed
characters of the keyboard. ReturnTrue
if it is possible that it was your friends name, with some characters (possibly none) being long pressed.Example 1:
Input: name = "alex", typed = "aaleex" Output: true Explanation: 'a' and 'e' in 'alex' were long pressed.
Example 2:
Input: name = "saeed", typed = "ssaaedd" Output: false Explanation: 'e' must have been pressed twice, but it wasn't in the typed output.
Example 3:
Input: name = "leelee", typed = "lleeelee" Output: true
Example 4:
Input: name = "laiden", typed = "laiden" Output: true Explanation: It's not necessary to long press any character.
Note:
name.length <= 1000
typed.length <= 1000
- The characters of
name
andtyped
are lowercase letters.
解题思路:我的方法是把字符串解析成 [字符,该字符连续出现的次数]的格式,例如lleeelee解析的结果是 ['l','2','e','3','l','1','e','2'],最后只要比较name的typed的解析结果即可,比较的方法是字符必须相同,数字必须name <= typed。
代码如下:
class Solution(object): def splitStr(self,sval): lsplit = [] lastChar = None lastCount = 0 for i in sval: if lastChar == None: lastChar = i lastCount = 1 elif lastChar != i: lsplit.append(lastChar) lsplit.append(str(lastCount)) lastChar = i lastCount = 1 else: lastCount += 1 lsplit.append(lastChar) lsplit.append(str(lastCount)) return lsplit def isLongPressedName(self, name, typed): """ :type name: str :type typed: str :rtype: bool """ nsplit = self.splitStr(name) tsplit = self.splitStr(typed) if len(nsplit) != len(tsplit): return False for v1,v2 in zip(nsplit,tsplit): if v1.isdigit() and v2.isdigit(): if int(v1) > int(v2): return False elif v1 != v2: return False return True