int** LCS_Length(char *x,char* y)
{
int xlen=strlen(x),ylen=strlen(y);
int **c=(int**)malloc((xlen+1)*sizeof(int*));
int i,j;
for(i=0;i<xlen+1;i++)
{
c[i]=(int*)malloc((ylen+1)*sizeof(int));
}
for(i=0;i<xlen+1;i++)
c[i][0]=0;
for(j=0;j<ylen+1;j++)
c[0][j]=0;
for(i=1;i<xlen+1;i++)
{
for(j=1;j<ylen+1;j++)
{
if(x[i-1]==y[j-1])
c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]>=c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
}
return c;
}
void printLCS(int **c,char *x,char *y)
{
int xlen=strlen(x);
int ylen=strlen(y);
int i=xlen,j=ylen;
char *s=(char*)malloc((xlen)*sizeof(char));
while(i>=1 || j>=1)
{
if(x[i-1]==y[j-1])
{
s[i-1]=x[i-1];
i--;
j--;
}
else if(c[i][j]==c[i-1][j])
{
s[i-1]='*';
i--;
}
else
j--;
}
for(i=0;i<xlen;i++)
{
if(s[i]!='*')
printf("%c ",s[i]);
}
}
算法导论 最长公共子序列(原书思路)
最新推荐文章于 2024-12-14 16:38:12 发布