LintCode 77: 最长公共子序列
public class Solution {
/**
* @param A, B: Two string.
* @return: the length of the longest common substring.
*/
public int longestCommonSubsequence(String A, String B) {
int lenA = A.length();
int lenB = B.length();
if(lenA==0 || lenB==0){
return 0;
}
int [][] result = new int[lenA+1][lenB+1];
int maxResult = -1;
for(int i=0;i<lenA+1;i++){
for(int j=0;j<lenB+1;j++){
result[i][j] = 0;
}
}
for(int i=1;i<=lenA;i++){
for(int j=1;j<=lenB;j++){
if(A.charAt(i-1) == B.charAt(j-1)){
result[i][j] = result[i-1][j-1]+1;
}else{
result[i][j] = max(result[i-1][j],result[i][j-1]);
}
maxResult = max(result[i][j],maxResult);
}
}
return maxResult;
}
public int max(int src,int dst){
if(src > dst){
return src;
}else{
return dst;
}
}
}
思路:
经典dp
(1)找状态,从后到前,目标:result[i][j]表示,A[i]与B[j]的最长公共子序列(i<=n,j<=m)。
(2)确定状态转移方程,二种决策(a[i] b[i]一样, a[i] b[i]不一样)
(3)复杂度为O(lenA*lenB),此种解法为递推,从前到后,使用循环来写。
(4)还有一种解法是递归,从后到前,记忆化搜索(备忘录)
(5)边界条件是遇到0
LintCode 77: 最长公共子序列的更多相关文章
- 77 最长公共子序列 (lintcode)
注意:因为开的空间是length+1的,对于字符串的下标计算要-1 class Solution { public: /* * @param A: A string * @param B: A str ...
- lintcode 77.Longest Common Subsequence(最长公共子序列)、79. Longest Common Substring(最长公共子串)
Longest Common Subsequence最长公共子序列: 每个dp位置表示的是第i.j个字母的最长公共子序列 class Solution { public: int findLength ...
- C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解
版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...
- lintcode:最长公共子序列
题目 最长公共子序列 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度. 样例 给出"ABCD" 和 "EDCA",这个LCS是 "A& ...
- 最长公共子序列LCS
LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了.公共部分 必须是以相同的顺序出现,但是不必要是连续的. LCS具有最优子结构,且满足重叠子问题的 ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
随机推荐
- 久违的phpstorm
原文:http://www.cnblogs.com/buyucoder/p/5291771.html 原文:http://idea.lanyus.com/
- 【Android】设置android:maxLines="1"后,android:imeOptions="actionSearch"失效
android:singleLine在API LEVEL 3已经废弃,可以用android:maxLines="1"代替. 但是测试的时候发现设置android:maxLines= ...
- CentOS7 睡眠 休眠 关机 电源
设置装有 CentOS7 的笔记本合盖后黑屏进入睡眠模式 systemd 能够处理某些电源相关的 ACPI事件,你可以通过从 /etc/systemd/logind.conf 以下选项进行配置: Ha ...
- Android-RelativeLayout(相对布局)
1.RelativeLayout(相对布局) 2.margin针对的是容器中的组件,而padding针对的是组件中的元素
- web 开发入门
一 :进入Web JAVASE:标准 - standard JAVA 桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 WEB 二:软件结构: c/s :clie ...
- AngularJS 包含
在 AngularJS 中,你可以在 HTML 中包含 HTML 文件. 在 HTML 中,目前还不支持包含 HTML 文件的功能. 大多服务端脚本都支持包含文件功能 (SSI: Server Sid ...
- js new
如果一个函数前面带上new来调用该函数,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将被绑定到那个新对象上 即: function B(){} var a=new B( ...
- 深入理解Java:SimpleDateFormat安全的时间格式化
这一篇我什么都不写,只推荐一篇大牛的博客,这篇博客给了我很多灵感,让我对多线程理解的更加透彻了; http://www.cnblogs.com/chenying99/articles/3331950. ...
- 微信小程序开发—快速掌握组件及API的方法---转载
微信小程序框架为开发者提供了一系列的组件和API接口. 组件主要完成小程序的视图部分,例如文字.图片显示.API主要完成逻辑功能,例如网络请求.数据存储.音视频播放控制,以及微信开放的微信登录.微信支 ...
- arm工作模式笔记
linux用户态程序即应用程序,在user模式 linux内核运行在svc模式 arm七个模式: usr用户模式 fiq快速中断模式 irq普通中断模式 supervior svc模式 abort ...