码迷,mamicode.com
首页 > 其他好文 > 详细

最长公共子序列

时间:2015-04-09 22:01:07      阅读:116      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!