最长公共子序列Lcs

来源:互联网 发布:数据直报系统 编辑:程序博客网 时间:2024/06/15 23:25

最长公共子序列Lcs

 

给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。

比如两个串为:

abcicba
abdkscab

ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Sample Input
abcicba
abdkscab
Sample Output

abca


代码如下:


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[1050][1050];int main(){    char a[1001],b[1001],c[1001];    while(gets(a))    {        gets(b);        int i,j;        int len1=strlen(a);        int len2=strlen(b);        //printf("%d %d\n",len1,len2);        for(i=0; i<=len1; i++)        {            dp[i][0]=0;        }        for(j=0; j<=len2; j++)        {            dp[0][j]=0;        }        for(i=1; i<=len1; i++)        {            for(j=1; j<=len2; j++)            {                if(a[i-1]==b[j-1])                {                    dp[i][j]=dp[i-1][j-1]+1;                }                else                {                    dp[i][j]=max( dp[i][j-1], dp[i-1][j] );                }            }        }        /*for(i=0;i<=len1;i++)        {            for(j=0;j<=len2;j++)            {                printf("%d ",dp[i][j]);            }            printf("\n");        }*/        int k=0;        for(i=len1; i>=0;)        {            for(j=len2; j>=0;)            {                if(a[i-1]==b[j-1])                {                    c[k]=a[i-1];                    i--;                    j--;                    k++;                }                else                {                    if(dp[i-1][j]>dp[i][j-1])                    {                        i--;                    }                    else                        j--;                }                if(i<1||j<1)                {                    i=-1;                    j=-1;                    break;                }            }        }        //printf("%d\n",k);        for(i=k-1; i>=0; i--)        {            printf("%c",c[i]);        }        printf("\n");    }    return 0;}


原创粉丝点击