[dp]leetcode1143:最长公共子序列LCS (medium)
题目:
题解:
- 动态规划的经典例题,可参考晴神的算法笔记
- 首先先使用暴力法思考吧,设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)相关推荐
- 算法之最长公共子序列(LCS)问题
算法课上老师留的作业,最长公共子序列LCS(Longest Common Subsequence)问题,首先看到这个问题感觉有点复杂,和最长公共子串不同,公共子序列并不要求元素相邻,看起来只有穷举才能 ...
- 最长公共子序列 (LCS) 详解+例题模板(全)
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/-萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗- ------------ ...
- 相似度:最长公共子序列--LCS
一.概念 1.子序列 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序).如序列[A,B,C,B,D,A,B]的子序列有:[A,B],[B,C,A],[A,D, ...
- 动态规划算法解最长公共子序列LCS问题
动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...
- 动态规划之最长公共子序列(LCS)
最长公共子序列(LCS,Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最 ...
- 程序员编程艺术第十一章:最长公共子序列(LCS)问题
程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...
- 最长公共子序列php,动态规划(最长公共子序列LCS)
概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...
- python实现求解最长公共子序列LCS问题
在实现论文<Automatically Generating Models for Botnet Detection>论文的算法中,用到了一个The longest commom subs ...
- 算法导论-----最长公共子序列LCS(动态规划)
目录 一.概念梳理 二.最长公共子序列解决方案 方案1:蛮力搜索策略 方案2:动态规划策略 三.C代码实现 实现1 实现2(空间优化) 一.概念梳理 1. 子序列(subsequence): 一个 ...
最新文章
- POJ 3177 判决素数个数
- 具有中央异常处理和VO验证的Spring Data JPA –框架
- 水晶报表横向打印BUG处理
- 高并发分布式系统中生成全局唯一Id汇总
- 关于stm32f407wifi模块的设置_西门子S7300PLC模拟量模块使用方法及编程方法
- Python里Matplotlib的pyplot模块绘制简单图形小例子
- OkHttp Interceptors(二)
- 怎么批量删除html里的字段,shp文件怎么删除字段
- bzoj4200: [Noi2015]小园丁与老司机(可行流+dp)
- 旧苹果电脑安装win10 双系统
- 网站打开速度与服务器的关系,网站打开速度慢对SEO的影响
- 10台世界上最快的超级计算机
- linux 禁用笔记本自带键盘
- Ubuntu10下载安装Android 2.2 froyo 源码
- 福建公共交易平台portal-sign
- STM32预装载寄存器与影子寄存器
- 服务器系统兼容性问题,服务器系统兼容性测试
- 微信群管理软件哪个好用?来看看大神都爱用哪些软件吧?
- 电子科大计算机复试c语言复试题目,电子科大计算机的复试之路_跨考网
- 【ARM-Linux开发】linux下代码调试