就是求最大公共子序列,很经典的一题,这题就当复习算法啦
递推公式:
c[i][j]=c[i-1][j-1]+1 当a[i-1]==b[j-1]时
c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1] 当a[i-1]!=a[j-1]时
#include<stdio.h>
#include<cstring>
int c[500][500];
char a[500],b[500];
int LCS(int m,int n)
{
int i,j;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++){
if(a[i-1]==b[j-1])
{
c[i][j]=c[i-1][j-1]+1;
}
else{
c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1];
}
}
}
return c[m][n];
}
int main()
{
int i,j,m,n;
while(scanf("%s %s",a,b)!=EOF)
{
memset(c,0,sizeof(c));
i=strlen(a);
j=strlen(b);
printf("%d\n",LCS(i,j));
}
return 0;
}