1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include <cstdio> #include <cstdlib> #include <cstring> #include <climits> #include <algorithm> #define MAXN 1000 using namespace std;
char str1[MAXN], str2[MAXN]; int dp[MAXN][MAXN];
int main() { int i, j; while(scanf("%s%s", str1 + 1, str2 + 1) != EOF ){ int len1 = strlen(str1 + 1); int len2 = strlen(str2 + 1); memset(dp, 0, sizeof(dp)); for(i = 0; i <= len1; i++){ dp[i][0] = 0; } for(i = 0; i <= len2; i++){ dp[0][i] = 0; } for(i = 1; i <= len1; i++){ for(j = 1; j <= len2; j++){ if(str1[i] == str2[j]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } }
printf("%d\n", dp[len1][len2]); memset(str1, 0, sizeof(str1)); memset(str2, 0, sizeof(str2)); } return 0; }
|