需求
给定一组单词,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他两个单词组合而成,这两个单词的组合顺序是索引值小的在左,索引值大的在右。若有多个长度相同的结果,返回其中索引最大的一项,若没有符合要求的单词则返回空字符串。
// 示例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 = prevWord
let index = prevIndex
for (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 = curWord
index = 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
}