最长公共子序列

  • 题目
  • 思路与算法
  • 代码实现

题目

思路与算法

  1. 本题是很经典的LCS(Longest Common SubSequence)动态规划类的题目,最近开始复习一下这方面的题型。
  2. 动态规划可以基本上总结为写出状态转移方程即可。没什么好讲的,我直接贴代码,见详细注释即可。

代码实现

Java实现:

class Solution {public int longestCommonSubsequence(String text1, String text2) {int len1 = text1.length();int len2 = text2.length();/* 初始化dp数组,i,j均从1开始,dp[i][j]为text1的前i个字符,和text2的前j个字符为输入的LCS值。动态方程为:dp[i][j] = dp[i - 1][j - 1] + 1dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])具体为上面的转移情况还是下面的转移情况其实也很清楚:1. 如果这俩子序列中当前遍历的字符相同,很显然此时将当前字符从两个字符串中都去掉得到的LCS只         比当前多的这个字符时的LCS小1,也就是第一个状态转移方程。2. 如果不同,那也很简单,不同则需要前移两个字符串之一的指针,要么第一个字符串去掉最后一个,         要么第二个字符串去掉最后一个字符,此时对比他们两者情况下的LCS值,当前情况下的LCS比这两者中大那          个LCS大1,如此即可。*/// 初始化dp数组记得多扩一组,因为dp[0][0]是不存值的。int[][] dp = new int[len1 + 1][len2 + 1];// 注意我们索引从1开始比较方便些for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; j++) {if (text1.charAt(i - 1) == text2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[len1][len2];}
}

C++实现:代码完全相同,注释看Java的

class Solution {public:int longestCommonSubsequence(string text1, string text2) {int len1=text1.length();int len2=text2.length();vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));for(int i=1;i<=len1;i++){for(int j=1;j<=len2;j++){if(text1[i-1] == text2[j-1])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}return dp[len1][len2];}
};

20200702:最长公共子序列(leetcode1143)相关推荐

  1. leetcode1143. 最长公共子序列(动态规划)

    给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删 ...

  2. [dp]leetcode1143:最长公共子序列LCS (medium)

    题目: 题解: 动态规划的经典例题,可参考晴神的算法笔记 首先先使用暴力法思考吧,设t1和t2的长度分别为m和n,那么对两个字符串中的每个字符,分别只有选和不选两个决策,而得到两个子序列后,比较两个子 ...

  3. 一分钟搞定最长公共子序列与最长公共子串的问题

    感谢大家的理解与指正!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!抱拳了罒ω罒   最长公共子序列和最长公共子串都是动态规划的经典题型,最长公共子序列要求的是不一定连续,最长公共子串 ...

  4. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  5. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  6. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  7. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

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

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

  9. 触类旁通,经典面试题最长公共子序列应该这么答

    作者 |  labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...

最新文章

  1. 两步完成项目定时启动,java项目定时启动
  2. php程序网站整站301,织梦dede怎么实现整站301
  3. new star program
  4. 第三次学JAVA再学不好就吃翔(part34)--多态的成员访问
  5. java 轻量级map,java Map 遍历速度最优解
  6. windows10 vscode 构建最强大的 Mingw C++ gcc 编译环境
  7. anaconda要和python安装在一个目录下吗_Python开发环境配置,Anaconda的安装!
  8. 全国首个凭“码”出行城市,深圳全面实施人员通行认证管理
  9. weblogic 找不到数据源问题
  10. 华为鸿蒙系统电脑有那些,华为鸿蒙系统上线,仅2家国产品牌支持,爆冷?
  11. ERP实施项目的计划阶段要点分析
  12. 在衣食住行上训练专注力
  13. xboxone硬盘坏的表现_硬盘或移动硬盘认不到时,应该怎样进行故障的检测才正确...
  14. 使用CSS绘制一个平行四边形
  15. EtherCAT总线控制伺服力矩控制功能块TorqueControl_FB(汇川H5U PLC)
  16. Accepted Necklace
  17. js中onchange事件举例用法
  18. 国内的专业Linux网站(GB)
  19. 自学抓去淘女郎所有模特美女的图片 手稿
  20. 数据重塑_借助实时3D重塑车载体验

热门文章

  1. 传感器的爆炸式增长下,隐私问题将重新定义?
  2. 花了 4 天,破解 UNIX 联合创始人 39 年前的密码!
  3. Java 8 中处理集合的优雅姿势——Stream
  4. 我是如何从零开始 Web 前端自学之路的?
  5. 20 岁 Google vs 18 岁百度,分道扬镳?| 畅言
  6. 雅虎辉煌不再,紫色血液永存
  7. 辽宁职称计算机和英语考试,2018年辽宁职称计算机报考有哪些要求?
  8. php外壳函数,php 方法笔记
  9. oracle备份恢复演练,记一次生产库的impdp恢复演练
  10. arm指令集_重磅!Arm宣布:指令集,客户可自定义