标签:
#include<stdio.h> #include<string.h> #define N 2000 int max(int a, int b) { if(a>b) return a; else return b; } char a[N], b[N]; int ch[N][N] = {0}; int main () { int i, j, m, n; while (scanf("%s%s", a, b)!=EOF) { memset(ch, 0 ,sizeof(ch)); //取零; m = strlen(a); n = strlen(b); for (i = 1; i<=m; i++) { for(j = 1; j<=n; j++) { if(a[i-1] == b[j-1]) ch[i][j] = ch[i-1][j-1] + 1; //原因见下表; else ch[i][j] = max(ch[i-1][j], ch[i][j-1]); } } printf("%d\n", ch[m][n]); } return 0; }
例
a = abcfbc
b = abfcab
a\b | a0 = a | a1 =b | a2 = c | a3 = f | a4 = b | a5 =c | a6 | a7 | a8 |
b0 = a | 1 | 1 | 1 | 1 | 1 | 1 |
空格的值的求法见代码 if(a[i-1] == b[j-1]) ch[i][j] = ch[i-1][j-1] + 1; else ch[i][j] = max(ch[i-1][j], ch[i][j-1]); |
||
b1 = b | 1 | 2 | 2 | 2 | 2 | 2 | |||
b2 = f | 1 | 2 | 2 | 3 | 3 | 3 | |||
b3 = c | 1 | 2 | 3 | 3 | 3 | 4 | |||
b4 = a | 1 | 2 | 3 | 3 | 3 | 4 | |||
b5 = b | 1 | 2 | 3 | 3 | 4 | 4 | |||
b6 | |||||||||
b7 | |||||||||
b8 |
标签:
原文地址:http://www.cnblogs.com/yishilin/p/4241851.html