-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy path0408-valid-word-abbreviation.js
More file actions
55 lines (50 loc) · 1.63 KB
/
0408-valid-word-abbreviation.js
File metadata and controls
55 lines (50 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* 408. Valid Word Abbreviation
* https://leetcode.com/problems/valid-word-abbreviation/
* Difficulty: Easy
*
* 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.
*/
/**
* @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;
};