点击打开链接
// main.cpp
// test
//
// Created by 吴有堃 on 2017/9/11.
// Copyright © 2017年 吴有堃. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <vector>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
int Maxlen[10005][10005];
int main()
{
int len1=0,len2=0,i=0,j=0;
char s1[10005]={'\0'},s2[10005]={'\0'};
while(scanf("%s %s",s1+1,s2+1)!=EOF){
len1=strlen(s1+1);
len2=strlen(s2+1);
for(i=0;i<=len1;i++)
Maxlen[i][0]=0;
for(j=0;j<=len2;j++)
Maxlen[0][j]=0;
for(i=1;i<=len1;i++){
for(j=1;j<=len2;j++){
if(s1[i]==s2[j]){
Maxlen[i][j]=Maxlen[i-1][j-1]+1;//二维数组的动态规划
}
else{
if(Maxlen[i-1][j]>Maxlen[i][j-1])
Maxlen[i][j]=Maxlen[i-1][j];
else
Maxlen[i][j]=Maxlen[i][j-1];
}
}
}
printf("%d\n",Maxlen[len1][len2]);
}
return 0;
}