标签:
问题描述
我们称序列Z = < z1, z2, …, zk >是序列X = < x1, x2, …, xm >的子序列当且仅当存在严格上升的序列< i1, i2, …, ik >,使得对j = 1, 2, … ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。
现在给出两个序列X 和Y,你的任务是找到X 和Y 的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z 既是X 的子序列也是Y 的子序列。
输入数据
输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200 的字符串,表示两个序列。两个字符串之间由若干个空格隔开。
输出要求
对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。
输入样例
abcfbc abfcab
programming contest
abcd mnp
输出样例
4
2
0
import java.util.Scanner;
public class CommonSubsequence {
public static void main(String[] args) {
int dp[][] = new int[500][500];
Scanner in = new Scanner(System.in);
String A = in.next();
String B = in.next();
int a = A.length();
int b = B.length();
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
if ((A.charAt(i-1) - ‘0‘) == (B.charAt(j-1) - ‘0‘)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
System.out.println(dp[a][b]);
}
}
标签:
原文地址:http://blog.csdn.net/a819721810/article/details/44964889