最长公共子序列

来源:互联网 发布:java struct 编辑:程序博客网 时间:2024/05/16 03:22

描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
注意:最长公共子序列和最长公共子串是不一样的。公共子序列只是要求子序列中的字母在母串中的顺序一样就好,并不要求位置完全一样。
过程看了 http://blog.csdn.net/yysdsyl/article/details/4226630/ 博客学会的 解释的很明白

这里写图片描述

#include<iostream>#include<cstring>using namespace std;string s1,s2;int dp[1001][1001];int LCS(int l1,int l2){    for(int i=0;i<=l1;i++)    for(int j=0;j<=l2;j++)    {        if(i==0||j==0)            dp[i][j]=0;        else if(s1[i-1]==s2[j-1])            dp[i][j]=1+dp[i-1][j-1];        else        dp[i][j]=max(dp[i-1][j],dp[i][j-1]);    }    return dp[l1][l2];}int main(){        memset(dp,0,sizeof(dp));    int n;    cin>>n;    while(n--)    {        cin>>s1>>s2;        cout<<LCS(s1.length(),s2.length())<<endl;    }    return 0;}
0 0
原创粉丝点击