求最长公共子序列
注意最长公共字串与最长公共子序列的区别
子串:是串连续的一部分;
子序列:不改变序列的顺序,而从序列中去掉任意元素而获得的新序列;
如字符串acdfg与akdfc的最长公共子串为df,而最长公共子序列为adf.
#include<stdio.h>
#include<string.h>
#define max(a,b) (a>b?a:b)
char s1[1010],s2[1010];
int dp[1010][1010];
int main()
{
while(scanf("%s%s",&s1,&s2)!=EOF)
{
memset(dp,0,sizeof(dp));
int len1=strlen(s1);
int len2=strlen(s2);
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(s1[i-1]==s2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d\n",dp[len1][len2]);
}
return 0;
}