最长公共子序列
来源:互联网 发布:淘宝比价软件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
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- UINavigationController实例之私人通讯录
- 有关Servlet初始化参数的获取方法
- 嵌入式 使用udev高效、动态地管理Linux 设备文件
- HDU 1686 Oulipo
- 黑马程序员_C语言冒泡算法和约瑟夫循环分析
- 最长公共子序列
- 解决SecureCRT中文乱码解决方法--字符集设置(Linux环境)
- 数据挖掘学习笔记--系统聚类法和K均值聚类法
- c++Primer,第十五章,面向对象编程
- Android学习笔记-前记
- Java对象和文件,字符串之间的相互转换方法
- ArrayList 、LinkedList和Vector比较
- Android网络编程---从服务器端获取JSON数据
- 1020. Tree Traversals (25)