Longest String Chain LeetCode solution in JavaScript

1
/**
2
* @param {string[]} words
3
* @return {number}
4
*/
5
var longestStrChain = function (words) {
6
let tiers = new Array(16);
7
for (let i = 0; i < tiers.length; i++) tiers[i] = [];
8
for (let word of words) tiers[word.length - 1].push({ word, len: 1 });
9

10
const isPredecessor = function (word1, word2) {
11
// Assumes word2.length = word1.length+1
12
let w1p = 0,
13
misses = 0;
14
for (let w2p = 0; w2p < word2.length; w2p++) {
15
if (word2[w2p] !== word1[w1p]) {
16
if (misses === 1) return false;
17
misses = 1;
18
} else {
19
w1p++;
20
if (w1p === word1.length) return true;
21
}
22
}
23
return true;
24
};
25

26
for (let i = tiers.length - 1; i > 0; i--) {
27
for (let w2 = 0; w2 < tiers[i].length; w2++) {
28
for (let w1 = 0; w1 < tiers[i - 1].length; w1++) {
29
if (tiers[i - 1][w1].len >= tiers[i][w2].len + 1) continue;
30
if (isPredecessor(tiers[i - 1][w1].word, tiers[i][w2].word))
31
tiers[i - 1][w1].len = tiers[i][w2].len + 1;
32
}
33
}
34
}
35

36
let max = 0;
37
for (let i = 0; i < tiers.length; i++) {
38
for (let j = 0; j < tiers[i].length; j++)
39
max = Math.max(max, tiers[i][j].len);
40
}
41

42
return max;
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0