文章目录

  • 1题目理解
  • 2 动态规划

1题目理解

输入:字符串数组words,字符串只包含小写字母
规则:对于word1和word2,如果在word1中任何一个位置添加一个字符能够得到word2,那么可以称word1为word2的前身。词链是单词 [word_1, word_2, …, word_k] 组成的序列,k >= 1,其中 word_1 是 word_2 的前身,word_2 是 word_3 的前身,依此类推。
输出:从words中选择词组成词链,词链可能的最长的长度。

Example 1:
Input: words = [“a”,“b”,“ba”,“bca”,“bda”,“bdca”]
Output: 4
Explanation: One of the longest word chain is “a”,“ba”,“bda”,“bdca”.
Example 2:
Input: words = [“xbc”,“pcxbcf”,“xb”,“cxbc”,“pcxbc”]
Output: 5

看了例子2,怎么也不明白怎么会是5,我觉得应该是3才对。这道题目和Longest Increasing Subsequence 是类似的。看了别人的答案才知道,从words中选择词,并没有说一定要按照顺序组成词链。选择n个词,之后可以按任意顺序组成词链,与原数组的下标无关。

2 动态规划

解题思路也和Longest Increasing Subsequence 是一样的。

class Solution {public int longestStrChain(String[] words) {int n = words.length;Arrays.sort(words, Comparator.comparingInt(String::length));int[] dp = new int[n];dp[0] = 1;int max = 1;for(int i=1;i<n;i++){dp[i] = 1;for(int j=0;j<i;j++){if(isPredecessor(words[j],words[i])){dp[i] = Math.max(dp[i],dp[j]+1);}}max = Math.max(max,dp[i]);}return max;}private boolean isPredecessor(String word1,String word2){if(word1.length()+1==word2.length()){int dis = 0;for(int i=0,j=0;i<word1.length() && j<word2.length();){if(word1.charAt(i) == word2.charAt(j)){j++;i++;}else{j++;dis++;}}return dis<=1;}return false;}
}

时间复杂度O(n2∗l)O(n^2*l)O(n2∗l)。n是words数组长度,l是每个单词的长度。

1048. Longest String Chain相关推荐

  1. leetcode刷题规划

    LeetCode精华题目列表[刷题规划系列] – TuringPlanet 目录 算法题到底在考察什么? 题目列表 Array String Linked List Queue Stack Advan ...

  2. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

  3. leetcode 5 :Longest Palindromic Substring 找出最长回文子串

    题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...

  4. LeetCode 524. Longest Word in Dictionary through Deleting

    题目: Given a string and a string dictionary, find the longest string in the dictionary that can be fo ...

  5. chain 的使用方法

    阅读原文点我 chain 的使用形式如下: 1 chain(iterable1, iterable2, iterable3, ...) chain 接收多个可迭代对象作为参数,将它们『连接』起来,作为 ...

  6. 长安链cmc工具check user cert on chain failed解决

    之前文章中介绍过使用国密算法启动链,但当国密算法链启动后,使用CMC命令工具进行后续的操作时,发生如下问题: Error: check user cert on chain failed, check ...

  7. undo表空间文件丢失恢复(3)--无备份无redo的情况下恢复

    undo表空间的数据文件丢失,如果没有备份的情况下,而且redo也不可用,这个时候就要采用隐藏参数来恢复,下边给出一个例子. undo表空间文件丢失恢复(1)--有备份的情况下恢复:http://bl ...

  8. Create your own blockchain amp; cryptocurrency! - understand blockchains by creating one in python

    What exactly is a blockchain? How does a blockchain work? What is Bitcoin or STEEM exactly? How does ...

  9. Learn Blockchains by Building One

    You're here because, like me, you're psyched about the rise of Cryptocurrencies. And you want to kno ...

最新文章

  1. Composer scripts脚本:事件列表与脚本触发
  2. HTML, CSS. JS的各种奇淫技巧
  3. Tark钱包面向全球招募优秀上币方,千亿财富等你来拿!
  4. 企业运维之域控篇(九)--辅助域强制占用后的操作--清除数据
  5. Shell脚本攻略01-简介/终端打印
  6. ASP.NET 4.0 的新特性(2 在WebForm中使用Routing)(翻译)
  7. 转:文件系统read,write缓存,有点意思
  8. Linux Container 研究报告
  9. 解决mac下webstorm编辑器识别less的问题
  10. Linux的实际操作:用户管理(查看用户和组的配置文件/etc/passwd /etc/group /etc/shadow)
  11. 计算机动漫设计VR主要学什么,VR动漫制作怎么学?
  12. 315记者卧底销售公司成为二把手:待遇比原来高多了,差点不想回来
  13. hibernate一对一关系实现
  14. java5个线程_java基础thread——java5之后的多线程(浅尝辄止)
  15. 大数据开发笔记(十):Hbase列存储数据库总结
  16. 我国标准时间授时方法
  17. Mac版Charles免费安装及使用
  18. 计算机系统复制文件,电脑没法复制文件?教您解决电脑没法复制文件
  19. 全文检索同时高亮多个字段
  20. tv.twitch.android,Twitch智能电视客户端

热门文章

  1. MySQL多项模糊查询
  2. SQLServer数据库,表内存,实例名分析SQL语句
  3. 也许你需要点实用的-Web前端笔试题
  4. Web Form要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...
  5. ASP.NET多线程编程(一) 收藏
  6. javasript 操作option select
  7. 所谓语音合成 是计算机根据语言学,计算语言学完整1
  8. 设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)
  9. 根据输入的日期计算周次和月份
  10. Jmeter使用流程及简单分析监控