Longest Common Subsequence - 最长公共子序列


问题

序列的子序列是原序列的子集,元素相对原序列的顺序不变。例如的子序列有

求两个序列的最长公共子序列的长度。

解法

设序列长度为(数组从开始,范围)。设的最长公共子序列的长度,则有状态转移方程:

初始化

,则显然两个序列的这个部分是公共的,所以的基础上加

,则两个序列的这个部分不是公共的,所以仍然保持之前的值,为了获取最大值我们会在中选取最大的那个;

即为序列的最长公共子序列的长度值。该算法的时间复杂度为


源码

LongestCommonSubsequence.h

LongestCommonSubsequence.cpp

测试

LongestCommonSubsequenceTest.cpp