JavaScript中最长字符串链的长度
单词链
假设只有当我们可以精确地在word1中添加一个字母使其等于word2时,word1才是word2的前导词。例如,“abc”是“abac”的前导词。
单词链是一个单词序列[word_1, word_2, ..., word_k],其中k >= 1,word_1是word_2的前导词,word_2是word_3的前导词,以此类推。
问题
我们需要编写一个JavaScript函数,该函数将字符串数组arr作为第一个也是唯一的参数。
数组arr中的每个字符串都由英文小写字母组成。我们的函数应该返回从给定数组arr中选择的单词的最长单词链的可能长度。
例如,如果函数的输入为:
const arr = ["a","b","ba","bca","bda","bdca"];
则输出应为:
const output = 4;
输出解释
最长的单词链之一是“a”、“ba”、“bda”、“bdca”。
示例
代码如下:
const arr = ["a","b","ba","bca","bda","bdca"]; const longestStrChain = (arr) => { arr.sort((a, b) => a.length - b.length); const isPredecessor = (word1 = '', word2 = '') => { if(Math.abs(word1.length - word2.length) !== 1){ return false; }; for(let i = 0; i < word2.length; i++){ const word = word2.slice(0, i) + word2.slice(i + 1); if(word === word1){ return true; }; }; return false; }; const array = []; let max = 0; for(let i = arr.length - 1; i >= 0; i--){ array[i] = 1; for(let j = arr.length - 1; j > i; j--){ if(isPredecessor(arr[i], arr[j])){ array[i] = Math.max( array[i], 1 + array[j], ); }; }; max = Math.max(max, array[i]); }; return max; }; console.log(longestStrChain(arr));
输出
控制台输出:
4
广告