问题描述:

代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
using namespace std;
int lcs[1100][1100];
int main(){
char s1[1100],s2[1100];
cin >> s1 >> s2;
int len1 = strlen(s1);
for(int i = strlen(s1);i>=1;i--){
s1[i] = s1[i-1];
}
s1[len1+1] = '\0';
int len2 = strlen(s2);
for(int i = strlen(s2);i>=1;i--){
s2[i] = s2[i-1];
}
s1[len2+1] = '\0';
for(int i = 1;i<strlen(s1);i++){
for(int j = 1;j<strlen(s2);j++){
if(s1[i] == s2[j])
lcs[i][j] = lcs[i-1][j-1] + 1;
else
lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
}
}
cout << lcs[strlen(s1)-1][strlen(s2)-1] << endl;
return 0;
}