408.Valid Word Abbreviation
Problem description:
A string can be abbreviated by replacing any number of non-adjacent substrings with their lengths. 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)
Note that "s55n"
("s ubsti tutio n"
) is not a valid abbreviation of "substitution"
because the replaced substrings are adjacent.
Given a string s
and an abbreviation abbr
, return whether the string matches with the given abbreviation.
Example 1:
1 | Input: word = "internationalization", abbr = "i12iz4n" |
Example 2:
1 | Input: word = "apple", abbr = "a2e" |
Constraints:
1 <= word.length <= 20
word
consists of only lowercase English letters.1 <= abrr.length <= 10
abbr
consists of lowercase English letters and digits.- All the integers in
abrr
will fit in a 32-bit integer.
Solution:
- two pointer for both strings
- If encounter number in
abbr
- start with
0
: return False - it’s a valid number: get number add to
i
- start with
- check if characters on
word[i]
andabbr[j]
are the same - since the number in abbr might directly add
i
to the end of word, need to check ifi
andj
both reached to the end.
1 | class Solution: |
time complexity: $O()$
space complexity: $O()$
reference:
related problem: