题目:

题解:

  • 动态规划的经典例题,可参考晴神的算法笔记
  • 首先先使用暴力法思考吧,设t1和t2的长度分别为m和n,那么对两个字符串中的每个字符,分别只有选和不选两个决策,而得到两个子序列后,比较两个子序列是否相同又需要O(max(m,n)),这样总复杂度为O(2m+n x max(m,n)),这样无法承受数据大的情况。
  • 动态规划求最长公共子序列(Longest Common Subsequence,简称 LCS)
  • 状态:dp[i][j]表示t1[1…i]和t2[1…j]的LCS长度(下标从1开始)
  • 状态转移方程:
  • 1)若t1[i]==t2[j],则表示t1和t2的LCS增加一位了,即dp[i][j]=dp[i-1][j-1]+1。
  • 2)若t1[i]!=t2[j],则表示t1和t2的LCS无法延伸,那么我们将t1[i]和t2[j]分别加入dp[i-1][j-1]中,看谁的LCS长即可。

代码如下:

class Solution {public://题解:动态规划,dp[i][j]表示t1[1...i]和t2[1...j]的LCS长度(下标从1开始)//状态转移方程:若t1[i]==t2[j],则表示t1和t2的LCS增加一位了,即dp[i][j]=dp[i-1][j-1]+1。//若t1[i]!=t2[j],则表示t1和t2的LCS无法延伸,那么我们将t1[i]和t2[j]分别加入dp[i-1][j-1]中,看谁的LCS长即可int longestCommonSubsequence(string text1, string text2) {int m=text1.size(),n=text2.size();int dp[m+1][n+1];memset(dp,0,sizeof(dp));for(int i=1;i<=m;++i){for(int j=1;j<=n;++j){if(text1[i-1]==text2[j-1]){dp[i][j]=1+dp[i-1][j-1];}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}}return dp[m][n];}
};

[dp]leetcode1143:最长公共子序列LCS (medium)相关推荐

  1. 算法之最长公共子序列(LCS)问题

    算法课上老师留的作业,最长公共子序列LCS(Longest Common Subsequence)问题,首先看到这个问题感觉有点复杂,和最长公共子串不同,公共子序列并不要求元素相邻,看起来只有穷举才能 ...

  2. 最长公共子序列 (LCS) 详解+例题模板(全)

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/-萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗- ------------ ...

  3. 相似度:最长公共子序列--LCS

    一.概念 1.子序列 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序).如序列[A,B,C,B,D,A,B]的子序列有:[A,B],[B,C,A],[A,D, ...

  4. 动态规划算法解最长公共子序列LCS问题

    动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...

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

    最长公共子序列(LCS,Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最 ...

  6. 程序员编程艺术第十一章:最长公共子序列(LCS)问题

    程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...

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

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

  8. python实现求解最长公共子序列LCS问题

    在实现论文<Automatically Generating Models for Botnet Detection>论文的算法中,用到了一个The longest commom subs ...

  9. 算法导论-----最长公共子序列LCS(动态规划)

    目录 一.概念梳理 二.最长公共子序列解决方案 方案1:蛮力搜索策略 方案2:动态规划策略 三.C代码实现 实现1 实现2(空间优化) 一.概念梳理   1. 子序列(subsequence): 一个 ...

最新文章

  1. 你真的了解深度学习生成对抗网络(GAN)吗?
  2. React入门系列 - 5. 表单与变量的关联
  3. maven 批量docker_Spring Boot 整合 docker
  4. tableau可视化数据分析60讲(十二)-过滤器详解
  5. boost::program_options模块实现一个用户定义的类来解析 特定机制——不是默认使用的 iostream 操作的测试程序
  6. Spring Boot 使用常见问题
  7. Linux Centos安装步骤
  8. 设计模式---解释器模式(C++实现)
  9. Flutter 添加 armeabi-v7a 本地库出现的一些问题
  10. url中文转码问题(python)
  11. 劝学篇翻译软件测试,汪洙《神童诗劝学篇》原文与译文
  12. 董明珠与22岁的秘书孟羽童
  13. 计算机安全论文文献,计算机专业毕业论文参考文献
  14. Java通过HAPI解析HL7消息
  15. mtklog结构及分析
  16. 20.Vaild-Parentheses
  17. 惠化洞(或双门洞)[혜화동 (혹은 쌍문동)]——朴宝蓝[박보람]
  18. Android 闹钟详解
  19. DiskGenius清除分区空闲空间后硬盘满了
  20. MySQL批量导入Excel、txt数据

热门文章

  1. 基于VLC的本地视频播放器
  2. 关于python的漫画_不能错过的Python漫画
  3. 云计算与网络安全:无代理安全防护更出色
  4. Android平板电脑上的APP应用程序设计须知
  5. 迭代器模式(实际运用比较少)
  6. Java语言是 解释执行 的语言吗
  7. 万字整理,肝翻Linux内存管理所有知识点
  8. QUICK PCB抄板教程(无网络编号)
  9. React中的浅比较是如何工作的?
  10. JQuery选择器细节-遁地龙卷风