您的位置:首页 > 其它

LCS 算法

2015-08-14 20:08 417 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: