Back to all solutions
#408 - Valid Word Abbreviation
Problem Description
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.
Solution
/**
* @param {string} word
* @param {string} abbr
* @return {boolean}
*/
var validWordAbbreviation = function(word, abbr) {
let wordIndex = 0;
let abbrIndex = 0;
while (wordIndex < word.length && abbrIndex < abbr.length) {
if (word[wordIndex] === abbr[abbrIndex]) {
wordIndex++;
abbrIndex++;
continue;
}
if (abbr[abbrIndex] < '0' || abbr[abbrIndex] > '9') return false;
if (abbr[abbrIndex] === '0') return false;
let num = 0;
while (abbrIndex < abbr.length && /[0-9]/.test(abbr[abbrIndex])) {
num = num * 10 + Number(abbr[abbrIndex]);
abbrIndex++;
}
wordIndex += num;
}
return wordIndex === word.length && abbrIndex === abbr.length;
};