LCS即最长公共子序列问题
解题思路:
LCS就是一个简单的DP,例子1:
字符串a:ABCDEF,长度l1.
字符串b:EBACD,长度l2.
结果:3 BCD
核心思路:
用分割线的方法,一开始分割线在字符串a的首字符的右边,然后内层循环去找和首字符相同的字符,如果找到的话就让当前状态下(即分割线在首字符右边)的字符对应的数量(即是dp【i】【j】)的数量等于左边一个字符对应的数量(即是dp【i】【j-1】)+1,到内层循环遍历完最后一个字符对应的数量(即是dp【i】【j】)就对应了该分割线下的最大数量。最后再让i+1,即分割线向右平移一个单位,重复上面的内容,最后得到的dp【l1】【l2】即是最大的那个相同子序列的数量。如果要找出这个序列是什么,就要用到dfs(深度优先搜索)
核心代码:
for(int i=1; i<=l1; i++)
{
for(int j=1; j<=l2; j++)
{
if(x[i-1]==y[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i