【JS】给定一组单词,找出其中的最长单词且该单词有着租单此种其他两个单词组合而成
需求
给定一组单词,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他两个单词组合而成,这两个单词的组合顺序是索引值小的在左,索引值大的在右。若有多个长度相同的结果,返回其中索引最大的一项,若没有符合要求的单词则返回空字符串。
// 示例1:
// 输入:[“ac”,“ad”,“acad”,“aga”,“agaacad”,“sk”,“skacad”,“hasdjasnskss”]
// 结果:agaacad
// 示例2
// 输入:[“ac”,“ad”,“acad”,“aga”,“agaacad”,“skd”,“skdacad”,“hasdjasnskss”]
// 结果:skdacad
实现
const isCombination = (array, curWord, prevWord, prevIndex) => {let longestWord = prevWordlet index = prevIndexfor (let i = 0; i < array.length; i++) {for (let j = i + 1; j < array.length; j++) {// 如果当前单词长度大于最长单词长度,或者当前单词长度等于最长单词长度但索引更大if (array[i] + array[j] === curWord || array[j] + array[i] === curWord) {if (curWord.length > longestWord.length ||(curWord.length === longestWord.length && j > index)) {longestWord = curWordindex = i}}}}return [longestWord, index]
}const func = (array) => {let resultWord = ""let index = -1// 遍历每个单词,检查是否可以由其他单词组合而成for (let i = 0; i < array.length; i++) {const word = array[i];[resultWord, index] = isCombination(array, word, resultWord, index)}return resultWord
}