- categories: Code, Interview Question, leetcode, Easy
- source: https://leetcode.com/problems/valid-word-abbreviation/description
- topics: String Manipulation, Two Pointers
A string can be abbreviated by replacing any number of non-adjacent, non-empty substrings with their lengths. The lengths should not have leading zeros.
For example, a string such as "substitution" could be abbreviated as (but not limited to):
"s10n"("s ubstitutio n")"sub4u4"("sub stit u tion")"12"("substitution")"su3i1u2on"("su bst i t u ti on")"substitution"(no substrings replaced)
The following are not valid abbreviations:
"s55n"("s ubsti tutio n", the replaced substrings are adjacent)"s010n"(has leading zeros)"s0ubstitution"(replaces an empty substring)
Given a string word and an abbreviation abbr, return whether the string matches the given abbreviation.
A substring is a contiguous non-empty sequence of characters within a string.
class Solution(object):
def validWordAbbreviation(self, word, abbr):
"""
:type word: str
:type abbr: str
:rtype: bool
"""
i = 0
j = 0
n = len(word)
m = len(abbr)
while i < n and j < m:
if word[i] == abbr[j]:
i += 1
j += 1
elif abbr[j] == '0':
return False
elif abbr[j].isdigit():
k = j
j += 1
while j < m and abbr[j].isdigit():
j += 1
shift = int(abbr[k:j])
i += shift
if i > n:
return False
else:
return False
return i >= n and j >= m