LCS算法:
寻找俩字符串的最大公共子串
俩个数组a[str1长+1][str2长+1], b[str1长+1][str2长+1]
a记录LCS值 b记录值从哪来的
数组第一行,第一列都初始化为0,其他根据计算而来
字符串相等时,a[i][j]=左上角值+1 b[i][j]记为1 是由左上角而来,所以回溯时 向左上角走
不等时:上面的比左面的大 a[i][j]=上面的值,b[i][j]=2
下面的比上面的大 a[i][j]=下面的值,b[i][j]=3
根据b输出结果
i=str1长 j=str2长
如果 b[i][j]=1 根据左上角来 递归调用i--;j--,输出cout<<str1[i-1];
b[i][j]=2 递归i-1;
b[i][j]=3 递归 j-1;
void LCS_print(const char *s1,const char *s2)
{
if(s1==NULL||s2==NULL)
return ;
int l1=0,l2=0;
l1=strlen(s1)+1;
l2=strlen(s2)+1;
if(l1==0||l2==0)
return 0;
int i,j;
int **a=new int [l1+1];
int **b=new int [l1+1];
//初始化
for(i=0;i
=a[i][j-1])
{
a[i][j]=a[i-1][j];
b[i][j]=2;
}
else
{
a[i][j]=a[i][j-1];
b[i][j]=3;
}
}
}
}
LCS(l1-1,l2-1,b,s1,s2);
int lcs=a[l1-1][l2-1];
//释放空间
for(i=0;i