408. Valid Word Abbreviation

Given a non-empty string s and an abbreviation abbr, return whether the string matches with the given abbreviation.

A string such as "word" contains only the following valid abbreviations:

["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", "1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

Notice that only the above abbreviations are valid abbreviations of the string "word". Any other string is not a valid abbreviation of "word".

Note:

Assume s contains only lowercase letters and abbr contains only lowercase letters and digits.

Example 1:

Given s = "internationalization", abbr = "i12iz4n":

Return true.

Example 2:

Given s = "apple", abbr = "a2e":

Return false.

Solution: Two Pointers

class Solution(object):
    def validWordAbbreviation(self, word, abbr):
        """
        :type word: str
        :type abbr: str
        :rtype: bool
        """
        word_idx = 0
        abbr_idx = 0
        while word_idx < len(word) and abbr_idx < len(abbr):
            if word[word_idx] == abbr[abbr_idx]:
                word_idx += 1
                abbr_idx += 1
                continue

            if abbr[abbr_idx] <= '0' or abbr[abbr_idx] > '9':
                return False

            start = abbr_idx
            while abbr_idx < len(abbr) and abbr[abbr_idx].isdigit():
                abbr_idx += 1
            word_idx += int(abbr[start: abbr_idx])

        return word_idx == len(word) and abbr_idx == len(abbr)

results matching ""

    No results matching ""