[LeetCode] Valid Word Abbreviation

408. Valid Word Abbreviation

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

A substring is a contiguous non-empty sequence of characters within a string.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
bool validWordAbbreviation(string word, string abbr) {
int i = 0, j = 0;
for(; i < word.size() and j < abbr.size();) {
if(isdigit(abbr[j])) {
if(abbr[j] == '0') return false;
int num = 0;
while(j < abbr.size() and isdigit(abbr[j])) {
num = num * 10 + abbr[j++] - '0';
if(i + num > word.size()) return false;
}
i += num;
} else {
if(word[i] != abbr[j]) return false;
i++,j++;
}
}
return i == word.size() and j == abbr.size();
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2024/02/10/PS/LeetCode/valid-word-abbreviation/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.