主题:看看怎样求公共子窜???
zimi1227
[专家分:0] 发布于 2007-04-29 11:47:00
才学习了匹配~~!看看什么思路和方法去求~!T=abababcdeabcdefab,P=xyabcedfxy
的公共子串?????[em10][em10][em10]
回复列表 (共1个回复)
沙发
lishiyong110 [专家分:300] 发布于 2007-05-04 16:03:00
# include <stdio.h>
# include <string.h>
# define N 100
char a[N],b[N],str[N];
int lcs_len(char *a, char *b, int c[ ][ N])
{ int m=strlen(a), n=strlen(b), i,j;
for (i=0;i<=m;i++) c[i][0]=0;
for (i=0;i<=n;i++) c[0][i]=0;
for (i=1;i<=m;i++)
for (j=1;j<=m;j++)
if (a[i-1]==b[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[m][n];
}
char *buile_lcs(char s[ ],char *a, char *b)
{ int k, i=strlen(a), j=strlen(b);
k=lcs_len(a,b,c);
s[k]='\0';
while (k>0)
if (c[i][j]==c[i-1][j]) i--;
else if (c[i][j]==c[i][j-1]) j--;
else { s[--k]=a[i-1];
i--; j--;
}
return s;
}
void main()
{ printf ("Enter two string(<%d)!\n",N);
scanf("%s%s",a,b);
printf("LCS=%s\n",build_lcs(str,a,b));
}
动态规划的思想
我来回复