最长公共子序列

来源:互联网 发布:淘宝比价软件app 编辑:程序博客网 时间:2024/04/28 01:38

问题描述
我们称序列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]);    }}
1 0
原创粉丝点击