【leetcode】925.Long Pressed Name

题目如下:

Your friend is typing his name into a keyboard.  Sometimes, when typing a character c, the key might get long pressed, and the character will be typed 1 or more times.

You examine the typed characters of the keyboard.  Return True 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:

  1. name.length <= 1000
  2. typed.length <= 1000
  3. The characters of name and typed 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

 

转载于:https://www.cnblogs.com/seyjs/p/9828540.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值