408. Valid Word Abbreviation - cocoder39/coco39_LC GitHub Wiki

408. Valid Word Abbreviation

class Solution:
    def validWordAbbreviation(self, word: str, abbr: str) -> bool:
        word_idx = 0
        abbr_idx = 0
        while word_idx < len(word) and abbr_idx < len(abbr):
            if abbr[abbr_idx].isdigit():
                if abbr[abbr_idx] == '0':
                    return False
                start = abbr_idx
                while abbr_idx+1 < len(abbr) and abbr[abbr_idx+1].isdigit():
                    abbr_idx += 1
                num = int(abbr[start:abbr_idx+1])

                if word_idx + num > len(word):
                    return False
                
                word_idx += num
                abbr_idx += 1
            else:
                if word[word_idx] != abbr[abbr_idx]:
                    return False
                word_idx += 1
                abbr_idx += 1
        return word_idx == len(word) and abbr_idx == len(abbr)
class Solution:
    def validWordAbbreviation(self, word: str, abbr: str) -> bool:
        num = 0
        word_idx = 0
        for ch in abbr:
            if ch.isdigit():
                if ch == '0' and num == 0: # no leading 0 and no 0
                    return False
                num = num * 10 + ord(ch) - ord('0')
            else:
                word_idx += num 
                num = 0
                if word_idx >= len(word) or word[word_idx] != ch:
                    return False
                word_idx += 1
        return word_idx + num == len(word)