LCS最长公共子序列

来源:互联网 发布:手机象棋打谱软件 编辑:程序博客网 时间:2024/06/07 13:45
#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[N],str2[N];
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;
}











原创粉丝点击