Problem Description
给定两个序列X=
Input
输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。
Output
每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。
Example Input
ABCBDAB BDCABA
Example Output
4
01 | #include<stdio.h> |
02 | #include<string.h> |
03 | int main() |
04 | { |
05 | char x[501], y[501]; |
06 | int n, m, i, j; |
07 | int c[501][501]; |
08 | while ( scanf ( "%s%s" , x, y) != EOF) |
09 | { |
10 | n = strlen (x); |
11 | m = strlen (y); |
12 | for (i = 0; i < n; i++) |
13 | { |
14 | c[i][0] = 0; |
15 | } |
16 | for (i = 0; i < m; i++) |
17 | { |
18 | c[0][i] = 0; |
19 | } |
20 | for (i = 1; i <= n; i++) |
21 | { |
22 | for (j = 1; j <= m; j++) |
23 | { |
24 | if (x[i-1] == y[j-1]) |
25 | { |
26 | c[i][j] = c[i-1][j-1] + 1; |
27 | } |
28 | else if (c[i - 1][j] > c[i][j-1]) |
29 | { |
30 | c[i][j] = c[i-1][j]; |
31 | } |
32 | else |
33 | { |
34 | c[i][j] = c[i][j-1]; |
35 | } |
36 | } |
37 | } |
38 | printf ( "%d\n" , c[n][m]); |
39 | } |
40 | return 0; |
41 | } |