zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    C#计算两个时间年份月份天数(根据生日计算年龄)差,求时间间隔
    C#四舍五入保留一位小数
    给Editplus去掉.bak文件
    $().each() 与 $.each()解析
    VS 2013+Qt 5.4.1
    HDU 5228 ZCC loves straight flush( BestCoder Round #41)
    产品经理的修炼:如何把梳子卖给和尚
    c++ STL unique , unique_copy函数
    linux定时备份mysql数据库文件
    Python——异常基础
  • 原文地址:https://www.cnblogs.com/seyjs/p/9828540.html
Copyright © 2011-2022 走看看