最长公共子序列问题
Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
给定两个序列X=
Input
输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。
Output
每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。
Sample Input
ABCBDAB BDCABA
Sample Output
4
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner (System.in);
while(cin.hasNext()) {
String a = cin.nextLine();
String b = cin.nextLine();
int c[][] = new int[500][500];//初始值为零
for(int i = 1; i <= a.length(); i++) {//两个字符串都从坐标为1的地方开始放
for(int j = 1; j <= b.length(); j++) {
if(a.charAt(i-1) == b.charAt(j-1)) {//如果两个字符相等
c[i][j] = c[i-1][j-1]+1;//该处的计数值加一
}
else {
c[i][j] = Math.max(c[i][j-1],c[i-1][j]);//另外该处的计数值为其左边和上边的最大值
}
}
}
System.out.println(c[a.length()][b.length()]);
}
}
}