一个数列,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则
称为已知序列的最长公共子序列
例如:序列<A,B,C,B,A>,<A,B,B,A,C>,则可以有子序列<A,B>,<A,B,B>,<A,B,B,A>,其中<A,B,B,A>就是这两个序列中最长的公共子序列
以下是部分子序列
-
Diff工具
-
Git等版本控制工具
-
相似资料搜索
定义序列X={x1,x2,…,xi},Y={Y1,Y2,…,Yj}
序列Z为XY的最长公共子序列,Z={Z1,Z2,Z2,…,Zk}
Z有三种情况
1.Xi=Yj,则Zk=Xi=Yj,并且Zk-1为Xi-1与Yj-1的最长公共子序列
2.Xi≠Yj,则Zk,为Xi-1与Yj的最长公共子序列
3.Xi≠Yj,则Zk,为Xi与Yj-1的最长公共子序列
依次类推,可推导出公式:
参考实现