您的位置:首页 > 其它

LCS最长公共子序列

2017-07-24 10:41 295 查看
#include <iostream>

#include <stdio.h>

#include <cstring>

#include <algorithm>

#include <string>

using namespace std;

#define N 1005

int dp[N+1][N+1];

char str1
,str2
;

int lcs(int len1,int len2)

{

    int i,j;

    int len=max(len1,len2);

    for(i=0;i<=len;i++){

        dp[i][0]=0;

        dp[0][i]=0;

    }

    for(i=1;i<=len1;i++){

        for(j=1;j<=len2;j++){

            if(str1[i-1]==str2[j-1]){

                dp[i][j]=dp[i-1][j-1]+1;

            }

            else {

                dp[i][j]=max(dp[i][j-1],dp[i-1][j]);

            }

        }

    }

    return dp[len1][len2];

}

int main()

{

    while(cin>>str1>>str2){

        int len1=strlen(str1);

        int len2=strlen(str2);

        cout<<lcs(len1,len2)<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: