最长公共子序列长度是编辑距离的另外一种表示方法。只允许添加、删除字符两种惭怍。它表征的是两字符串之间的相似度。
解决思路是:
如果a[i]=b[j],则 公共子序列长度加1,继续考察a[i+1]和b[j+1]。
如果a[i]!=b[j],则删除a[i]或者在b[j]前面添加字符a[i],继续 考察a[i+1]和b[j];
或者 删除b[j]或者在a[i]前面添加字符b[j],继续考察a[i]和b[j+1]。

反过来我们可以说要想求a[0…i]和b[0…j]的最长公共子序列长度max_lcs(i,j),只能从以下三种状态过来:(i-1,j-1) (i-1,j) 和(i,j-1)

如果:a[i]==b[j],那么:max_lcs(i, j) 就等于:
max(max_lcs(i-1,j-1)+1, max_lcs(i-1, j), max_lcs(i, j-1));如果:a[i]!=b[j],那么:max_lcs(i, j) 就等于:
max(max_lcs(i-1,j-1), max_lcs(i-1, j), max_lcs(i, j-1));其中 max 表示求三数中的最大值。
public int lcs(char[] a, int n, char[] b, int m) {int[][] maxLcs = new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(i==0 && j==0){maxLcs[0][0] = (a[0]==b[0]?1:0);}else{maxLcs[i][j] = Integer.MIN_VALUE;if(i>0 && j>0){maxLcs[i][j] = Math.max(maxLcs[i][j],maxLcs[i-1][j-1]+(a[i]==b[j]?1:0));}if(j>0){maxLcs[i][j] = Math.max(maxLcs[i][j],maxLcs[i][j-1]);}if(i>0){maxLcs[i][j] = Math.max(maxLcs[i][j],maxLcs[i-1][j]);}}}}return maxLcs[n-1][m-1];}

动态规划——最长公共子序列长度相关推荐

  1. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

  2. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

  3. 动态规划1--最长公共子序列

    动态规划1--最长公共子序列 一.动态规划 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并 综合子问题的解导出大问题的解的方法,问题求解耗时 ...

  4. 动态规划—最长公共子序列LCS及模板

    一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB.这两个字符串的最长公共子序列长度 ...

  5. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  6. 求最长公共子序列长度

    求两个字符串的公共子序列 1.求最长公共子序列(子序列可以不连续) 这是一道动态规划题,设二维数组dp[i][j],dp[i][j]表示a串前i个字符(包括第i个)与b串前j个字符(包括第j个)所有的 ...

  7. 算法:动态规划——最长公共子序列

    文章目录 一.动态规划概念 1. 动态规划步骤 最长公共子序列问题 题目 示例 分析 代码(递归) 查表 打印最长公共子序列 一.动态规划概念 动态规划算法与分治法类似,其基本思想也是将待求解问题分解 ...

  8. python 最长公共子序列长度_python实现最长公共子序列

    最长公共子序列python实现,最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来. 1.找出最优解的性质,并刻划其结构特征 序列a共有m个元素,序列b共有n个元素,如果a[m-1]== ...

  9. c语言最长公共子序列,算法设计与分析/动态规划——最长公共子序列LCS及模板...

    这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符 ...

最新文章

  1. java学习笔记第三章
  2. 机房冷热通道系统整体解决方案
  3. 「PKUWC2018」随机游走
  4. mysql 5.7变化_从MySQL 5.5到5.7看复制的演进
  5. 管家婆打印自定义编辑_打印相关,人手一份!
  6. STL堆算法性能分析与优化方法(GCC4.4.2 stl_heap.h源代码分析与改进方案)
  7. Apache中配置ASP.NET环境
  8. 【破解】百度网盘不限速(亲测可用)
  9. python仓库管理
  10. **python入门实战**-华氏度转摄氏度python代码
  11. F: Shattered Cake
  12. 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
  13. 你不能错过的超赞色彩组合
  14. “Entity Data Modle Designer 无法显示”的问题
  15. 【12c】新特性:Oracle 12c In-Database Archiving 数据库内归档
  16. 模糊处理(下)--高斯模糊,双边模糊以及实现一个简单的磨皮美颜效果(opencv学习记录--4)
  17. Mysql(三)Mysql索引基本原理
  18. シンシア / 辛西娅
  19. Excel函数带你看透身份证号
  20. Markdown中使用latex插入公式花体字母

热门文章

  1. 栈的应用--迷宫问题
  2. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
  3. day02-java关键字
  4. Dubbo xml配置 和注解配置 写法
  5. ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
  6. Oracle修改字段的顺序
  7. mysql定义shell变量_shell 变量的定义,赋值,运算
  8. Mybatis的mapper标签 namespace属性说明
  9. android页面布局更改,使用setContentView的方式更换布局文件从而更换界面
  10. android程序的入口点,常见android面试基础题