子序列(子数组)问题的解法

41.最长上升子序列
42.最长连续递增序列


43.最长重复子数组
44.最长公共子序列
45.不相交的线


46.最大子序和
47.判断子序列
48.不同的子序列
49.两个字符串的删除操作


代码随想录一共有八道子序列相关的动态规划题目。

大多数的思想就是从[0...i-1]的子序列推出[0...i]的子序列的状态。

递增子序列问题

这两道题目的dp数组含义都是:以nums[i]结尾的最长递增子序列,意味着这个子序列必须包括nums[i]

注意是以nums[i]结尾,并不是nums[0...i]的最长递增子序列,这两者区别非常大

例如

41.最长上升子序列

所以这道题目是求:严格递增子序列的长度

300. 最长递增子序列-最长上升子序列 (网站连接可能有问题,请在站内搜索)

42.最长连续递增序列

所以本题目和上面题目的唯一区别是:本题要求子序列是连续递增序列

674. 最长连续递增序列 (网站连接可能有问题,请在站内搜索)

二维子序列问题

43.最长重复子数组

本题要求得到两个数组的公共最长子数组

718. 最长重复子数组(网站连接可能有问题,请在站内搜索)

44.最长公共子序列

本题与上面的区别是找公共子序列,所以是非连续的

1143. 最长公共子序列

45.不相交的线