最长公共子序列问题(Longest Common Subsequence problem):给定两个序列X = <x1,x2,...,xm>和Y = <y1,y2,...,yn>,求X和Y长度最长的公共子序列。
注:本文的大多数概念及求解方法来自《算法导论》
使用动态规划求解LCS问题过程:
一、刻画最长公共子序列的特征
LCS的最优子结构定理:设X={x1,x2,……,xm}和Y={y1,y2,……,yn}为两个序列,并设Z={z1、z2、……,zk}为X和Y的任意一个LCS,则:
(1)如果xm=yn,那么zk=xm=yn,而且Zk-1是Xm-1和Yn-1的一个LCS。
(2)如果xm≠yn,那么zk≠xm蕴含Z是是Xm-1和Yn的一个LCS。
(3)如果xm≠yn,那么zk≠yn蕴含Z是是Xm和Yn-1的一个LCS。
这个定理也很好理解,有一些减而治之的思想,举个栗子:
从字符串的最后一位开始比较
1.对 X = "AGTGATG",Y = "GTTAG",则Z = "GTAG",此时m = 7,n