一分钟搞定最长公共子序列与最长公共子串的问题
感谢大家的理解与指正!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!抱拳了罒ω罒
最长公共子序列和最长公共子串都是动态规划的经典题型,最长公共子序列要求的是不一定连续,最长公共子串的要求的是必须连续。
1. 最长公共子序列的问题——leetcode-1143 最长公共子序列
- 当 text1[i - 1] == text2[j - 1] 时,说明两个子字符串的最后一位相等,所以最长公共子序列又增加了 1,所以 dp[i][j] = dp[i - 1][j - 1] + 1;
- 当 text1[i - 1] != text2[j - 1] 时,说明两个子字符串的最后一位不相等,那么此时的状态 dp[i][j] 应该是 dp[i - 1][j] 和 dp[i][j - 1] 的最大值。举个例子,比如对于 ace 和 bc 而言,他们的最长公共子序列的长度等于 ① ace 和 b 的最长公共子序列长度0 与 ② ac 和 bc 的最长公共子序列长度1 的最大值,即 1。
import java.util.Arrays;
public class longestCommonSubsequence_1143 {public static int longestCommonSubsequence(String text1, String text2) {int m = text1.length();int n = text2.length();//dp[i][j]表示text1(0,i - 1)和text2(0,j - 1)最长公共子序列的最大值int [][]dp = new int[m + 1][n + 1];//注意从1开始遍历,方便处理for (int i = 1; i <= m; i++) {char c1 = text1.charAt(i - 1);for (int j = 1; j <= n; j++) {char c2 = text2.charAt(j - 1);dp[i][j] = c1 == c2 ? dp[i - 1][j - 1] + 1 : Math.max(dp[i - 1][j],dp[i][j - 1]);}}return dp[m][n];}
}
2. 最长公共子串的问题——leetcode-718 最长公共子序列
定义 dp[i][j] 表示 text1[0:i-1]以 i结尾的子串和 text2[0:j-1] 以j结尾的子串的最大公共子串
- 当 text1[i - 1] == text2[j - 1] 时,说明两个子字符串的最后一位相等,所以最长公共子串又增加了 1,所以 dp[i][j] = dp[i - 1][j - 1] + 1;
- 当 text1[i - 1] != text2[j - 1] 时,说明两个子字符串的最后一位不相等,那么此时的状态 dp[i][j] 直接是 0。举个例子,比如对于 acde 和 bcdf 而言,自定义为他们的最长公共子串为0(实际是2),对于 aecd 和 bcd 而言定义他们的最长公共子串为2。
public class findLength_718 {public static int findLength(int[] nums1, int[] nums2) {int m = nums1.length;int n = nums2.length;int res = 0;//dp[i][j]表示text1(0,i - 1)和text2(0,j - 1)最长公共子串int [][]dp = new int[m + 1][n + 1];for (int i = 1; i <= m; i++) {int c1 = nums1[i - 1];for (int j = 1; j <= n; j++) {int c2 = nums2[j - 1];//注意与最长公共子序列的区别dp[i][j] = c1 == c2 ? dp[i - 1][j - 1] + 1 : 0;if (dp[i][j] > res)res = dp[i][j];}}return res;}
}
一分钟搞定最长公共子序列与最长公共子串的问题相关推荐
- 北京退公交卡:网点排队110分钟 黄牛1分钟搞定 (zz)
http://www.chinanews.com/sh/2013/10-18/5398118.shtml?f=baidu.com 动物园公交枢纽退卡网点排起了长队.人民网赵艳红摄 //z 2013-1 ...
- 启程 - 《每日五分钟搞定大数据》
<每日五分钟搞定大数据>原创系列,每周不定期更新.欢迎关注公众号:大叔据 想了很久,准备开始写一系列的文章,记录这些年来的所得所想,感觉内容比较多不知从哪里开始,画了个思维导图确定了大 ...
- 正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟
五分钟搞定正则表达式,如果没搞定,再加两分钟 [这是 ZY 第 18 篇原创文章] 文章概览 一.正则表达式介绍 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简 ...
- 逗号后面统一加空格_十分钟搞定字幕,教你做加字幕的“快手菜”
平台上许多同学有疑问:做视频是否有加字幕的必要呢? 其实除了外语需要翻译.语速过快加字幕方便理解.普通话不标准等情况之外,还是建议有余力的同学可以加上字幕,提升用户的观看体验. 那么问题来了,存在以下 ...
- 视频教程-10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码)-微信开发
10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码) 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. ...
- windows+mysql集群搭建-三分钟搞定集群
一.集群了解 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.首先看了一些关于集群的资料,然后根据步骤一步步的整,遇到了一些问题,在这里把我遇到的问题以及解 ...
- 风控必备的评分卡模型,TempoAI 10分钟搞定
8月20日,央行发布了<2020年第二季度支付体系运行总体情况>,数据显示,截至第二季度末,信用卡逾期半年未偿信贷总额838.84亿元,占信用卡应偿信贷余额的1.17%.与一季度相比,信用 ...
- 用1分钟学会4个PPT高效小技巧,3个小时才能完成的工作5分钟搞定~
制作PPT总是要花费巨长的时间?看过来~用1分钟学会4个PPT高效小技巧,3个小时才能完成的工作5分钟搞定,效率就是这么高~ 1.一秒去动画 操作:幻灯片放映-设置幻灯片放映-放映时不加动画 2.抠图 ...
- 一分钟搞定触手app主页酷炫滑动切换效果
代码地址如下: http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想 ...
最新文章
- scrolling=no 无法根据坐标获取元素_汽车制造行业如何选择三坐标测量仪?
- 2021牛客暑期多校训练营4 Tree Xor (区间异或上一个数+区间求交)
- 如何有效地连接字符串
- C语言中| 按位或, || 逻辑或。
- Python轻量级IDE推荐 -- Jupyter QTConosle
- slimphp中间件调用流程的理解
- mPaas-RPC拦截器各种场景下的使用指南
- cad中简单流程图制作_Excel vba 简单制作流程图方法介绍
- Spring 常见问题( 持续更新... ... )
- VMware下Ubuntu与宿主Windows共享文件夹
- 学习 storm,整合 springboot
- html如何做幻灯片效果,超酷的CSS3幻灯片效果
- Windows又又又更新?Win 12开发将于下个月开始
- GlassFish 理解
- STM8L051比较器使用案例(二)COMP1+COMP2构成窗口比较器
- Linux C程序访问NULL指针
- DGP链游公会丨一文概览什么是GameFi链游
- c++ mupdf 提取pdf文件里面图片
- weka使用训练集分类测试集_技术分享
- CISCO和华为交换机修改密码