# https://leetcode.com/problems/long-pressed-name/
# 925. Long Pressed Name

# History:
# Google
# 1.
# Mar 10, 2020

# 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:
#
# name.length <= 1000
# typed.length <= 1000
# The characters of name and typed are lowercase letters.


class Solution(object):
    def isLongPressedName(self, name, typed):
        """
        :type name: str
        :type typed: str
        :rtype: bool
        """
        if len(typed) < len(name):
            return False

        typed_idx = 0
        name_idx = 0

        while True:
            if typed_idx == len(typed) or name_idx == len(name):
                return typed_idx == len(typed) and name_idx == len(name)

            name_count = typed_count = 0
            while typed_idx < len(typed) - 1 and typed[typed_idx] == typed[typed_idx + 1]:
                typed_count += 1
                typed_idx += 1

            while name_idx < len(name) - 1 and name[name_idx] == name[name_idx + 1]:
                name_count += 1
                name_idx += 1

            if typed_count < name_count:
                return False

            typed_idx += 1
            name_idx += 1
