求最長公共子序列
注意最長公共字串與最長公共子序列的區別
子串:是串連續的一部分;
子序列:不改變序列的順序,而從序列中去掉任意元素而獲得的新序列;
如字符串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;
}