LCS模板

求最長公共子序列

注意最長公共字串與最長公共子序列的區別
子串:是串連續的一部分;
子序列:不改變序列的順序,而從序列中去掉任意元素而獲得的新序列;
如字符串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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章