【day-4】最大公共子序列

来源:互联网 发布:犀牛建模软件 编辑:程序博客网 时间:2024/06/17 18:14
#include <iostream>#include <cstring>#include <iostream>using namespace std;/*求出最大的公共子序列并返回*/string LCSL(string str1, string str2){    int i,j;    int len1=str1.size();    int len2=str2.size();    int len=max(len1,len2);    /*定义一个方型的矩阵*/    int dp[len+1][len+1];    /*多出两个0行*/    for(int i=0; i<=len;i++)    {        dp[i][0]=0;        dp[0][i]=0;    }    for(int i=1;i<=len1;i++)    {        for(int j=1;j<=len2;j++)        {            /*i-1是因为多出了一个0行*/            if(str1[i-1]==str2[j-1])            {                dp[i][j]=dp[i-1][j-1]+1;            }            else            {                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);            }        }    }    /*根据dp矩阵推出最大公共子序列*/    string lcs("");    for(int i=len1; i>=1 ;i--)    {        if(dp[i][len2]!=dp[i-1][len2])            lcs=str1[i-1]+lcs;    }    return lcs;}int main(){    string str1("1x2x3x4xx56xxxx7x");    string str2("1yy2yy3yy45yy6yyy");    cout<<str1<<endl;    cout<<str2<<endl;    cout<<LCSL(str1,str2)<<endl;    return 0;}
0 0
原创粉丝点击