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)