最长公共子序列(不需要连续)

来源:互联网 发布:osi网络七层协议 编辑:程序博客网 时间:2024/04/30 13:04
#include <iostream>
#include <stdio.h>
#include <string.h>


#define maxn 10000 + 10


using namespace std;
int dp[maxn][300];


int main()
{
    char str1[100];
    char str2[100];
    while(scanf("%s%s",str1 +1, str2 + 1))
    {
        int len1 = strlen(str1);
        int len2 = strlen(str2);
        memset(dp,0,sizeof(dp));
        if(str1[1] == str2[1])
           dp[1][1] = 1;
        for( int i = 1; i <= len1; i++)
         {
             for( int j = 1; j <= len2; j++)
               {
                   if( str1[j] == str2[i])
                     dp[i][j] = dp[i-1][j-1] + 1;
                   else
                     dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
               }
         }
         cout<<dp[len1][len2]<<endl;
    }
}
0 0
原创粉丝点击