Open sl1673495 opened 4 years ago
没看懂let rest = words.slice(0, i).concat(words.slice(i + 1))有什么意义,按长度排序了,前面的wordBreak后就不用再进循环序列里面去了啊,后面不可能是由前面的组成不是吗 直接rest = words.slice(i + 1); wordBreak的循环也可以优化,i = j的时候是没有意义的
for (let i = 1; i <= n; i++) {
for (let j = i - 1; j >= 0; j--) {
给定一组单词 words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-word-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
根据题目的要求来看,先把
words
数组按照先比较长度,后比较字典序排列好,把长度最长且字典序最小的字符串先放在前面,然后遍历words
数组,用当前的单词word
去和剩下的单词数组利用单词拆分-139的动态规划思路求解是否能拼成,这样可以尽早的返回正确结果。