LCS

#include<iostream>
#include<cstring>
#include<cstdlib>
#define SIZE 100
using namespace std;
    char str1[SIZE];
    char str2[SIZE];
    char ele_str[SIZE];
int D[SIZE][SIZE]={{0,0}};
int len1,len2,_count;
void dp()
{
    len1=strlen(str1);
    len2=strlen(str2);
   for(int i=len1-1;i>=0;i--)
   {
       for(int j=len2-1;j>=0;j--)     //匹配遍历
       {
            if(str1[i]==str2[j])
            {
//
                D[i][j]=D[i+1][j+1]+1;    //串的话在那张表中只能斜着传,一个字符只能匹配一次
            }
            else
                {D[i][j]=max(D[i+1][j],D[i][j+1]);}
       }
   }
}
void show()
{        cout<<"最长子序列长度";
         cout<<D[0][0]<<endl;
         cout<<"最长子序列:";
 int n=D[0][0];
 for(int i=0;i<len1;i++)
    for(int j=0;j<len2;j++)
 {
     if(D[i][j]==n&&str1[i]==str2[j])
        {
            cout<<str1[i]<<" ";
            n--;i++;j++;
        }
 }
 cout<<endl;
}
int main()
{
     while(cin>>str1>>str2)
     {   memset(D,0,sizeof(D));
         dp();
         show();
     }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值