Sample Input abcfbc abfcab programming contest abcd mnp
Sample Output 4 2 0 代碼如下:
#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
空格的值的求法見代碼
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