给出两个序列,求两个序列最长的公共部分
参考文章动态规划 最长公共子序列 过程图解_hrn1216的博客-CSDN博客_最长公共子序列
加入给出两个子序列
s1 | 1 | 3 | 4 | 5 | 6 | 7 | 7 | 8 | |
s2 | 3 | 5 | 7 | 4 | 8 | 6 | 7 | 8 | 2 |
两者最长的序列应该是3 5 7 7 8
核心思想:
当s1的最后一个值和s2的最后一个值相等的时候,其最长序列应该是除去这两个值后两个子序列的最大长度加一
当s1的最后一个值和s2的最后一个值不相等的时候,其最长序列应该是去掉s1最后一个值的最大长度和去掉s2最后一个值的最大长度的最大值
拿图中的这个值举例因为两个子序列的结尾都是5,所以应该等于蓝色框内的值加一
当两个值不相等的时候,应该取蓝色框内两个值较大的那个