首页 > 其他 > 详细

最长公共子序列

时间:2015-04-09 21:58:39      阅读:151      评论:0      收藏:0      [点我收藏+]

问题描述
我们称序列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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!