【问题描述】给定两个字符序列,找到这俩个字符序列中最长的公共子序列
【输入形式】 1:A,B,C,B,D,A,B;
2:B,D,F,A,B,A
【输出形式】B,D,A,B
【题目解析】这里所说的公共子序列,并不要求在俩个子序列中连续,就如例题中给出的输出形式我们可以发现,公共子序列在原序列2中并不是连续的,那这便要求我们考虑很多种情况,最容易想到的便是暴力求解,依次遍历序列1与2去比较。并对每次的结果进行比较,保留长度最大的公共子序列。这种思想容易想到,但空间时间复杂度较高,对资源开销巨大。通过分析我们容易发现,最长公共子序列为4时,一定存在公共子序列长度为3,2,1的子序列。例如:最长公共子序列为B,D,A,B;其长度为4,存在公共子序列:B,D,A;其长度为3,同理存在B,D;A;等子序列;可以看出最长子序列包含前一长度下的最优子结构,并且存在重叠子问题(即在前一长度序列下求出本次最佳 长度序列),那么我们便容易想到采取动态规划的思路解决此问题来降低开销。
【核心思路】
一、定义:为了方便处理问题,这里我们做如下定义:
1.定义X[i],Y[i]来存储俩个原始序列;
2.定义全局二维数组C[i][j]来记录遍历至X[i][j]处,目前最长公共子序列的长度;