【LeetCode笔记】1143. 最长公共子序列(Java、动态规划、字符串)
文章目录
- 题目描述
- 思路 & 代码
- 二刷
- 三刷
题目描述
- 算是很高频的面试题了,而且题号还挺后的
思路 & 代码
- 注意:dp[i]][j] 和 charAt(i) 有1的下标差(dp初始化边界)
- 核心思想:当前值可构成新的最大子串就左上角值 + 1,否则取左边与上边的最大值。
- tips:众所周知 Java 字符串换 charArray 效率会提高
class Solution {public int longestCommonSubsequence(String text1, String text2) {// 二维数组-动态规划的经典题int m = text1.length();int n = text2.length();// dp[i][j]:[0, i - 1] 和 [0, j - 1] 的子字符串的最大公共子序列值int[][] dp = new int[m + 1][n + 1];// 边界自动初始化为0for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++){// 当前相等的情况,取左上角的值 + 1if(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[m][n];}
}
二刷
- 只能说经典就是经典
class Solution {public int longestCommonSubsequence(String text1, String text2) {int m = text1.length();int n = text2.length();int[][] dp = new int[m + 1][n + 1];for(int i = 0; i < m; i++) {for(int j = 0; j < n; j++) {if(text1.charAt(i) == text2.charAt(j)) {dp[i + 1][j + 1] = dp[i][j] + 1;}else {dp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]);}}}return dp[m][n];}
}
三刷
- 最近喜欢写短点,6行解决~
class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp = new int[text1.length() + 1][text2.length() + 1];for(int i = 1; i <= text1.length(); i++) {for(int j = 1; j <= text2.length(); 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[text1.length()][text2.length()];}
}
【LeetCode笔记】1143. 最长公共子序列(Java、动态规划、字符串)相关推荐
- LeetCode 1143. 最长公共子序列(动态规划)
1. 题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符 ...
- leetcode 1143. Longest Common Subsequence | 1143. 最长公共子序列(动态规划,暴力递归->傻缓存->dp)
题目 https://leetcode.com/problems/longest-common-subsequence/ 题解 经典的 暴力递归 -> 傻缓存 -> dp 题目,以 &qu ...
- LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)
LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...
- leetcode - 1143. 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何 ...
- leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)
文章目录 718. 最长重复子数组 题目描述 思路分析 完整代码 1143. 最长公共子序列 1035. 不相交的线: 这三道题思路基本一样,尤其是最后两道,代码都一样,一点不需要改的,所以放一起把. ...
- 1143.最长公共子序列
1143.最长公共子序列 文章目录 1143.最长公共子序列 一.题目描述 二.方法一:暴力法 三.方法二.动态规划 四.补充:打印输出最长公共子串 五:心得体会 1143. 最长公共子序列 一.题目 ...
- 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列
(为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...
- 【BZOJ2423】最长公共子序列(动态规划)
[BZOJ2423]最长公共子序列(动态规划) 题面 BZOJ 洛谷 题解 今天考试的时候,神仙出题人\(fdf\)把这道题目作为一个二合一出了出来,我除了orz还是只会orz. 对于如何\(O(n^ ...
- [Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]
[问题描述][中等] [解答思路] 时间复杂度:O(N^2) 空间复杂度:O(N^2) class Solution {public int longestCommonSubsequence(Stri ...
- Leetcode 1143.最长公共子序列(求长度)
Time: 20190906 Type: Medium 题目描述 给定两个字符串text1和text2,返回它们的最长公共子序列. 子序列是通过原字符串删除一些字符(可以不删)生成的新的字符串,不改变 ...
最新文章
- java判断星期天_java实现一个月的最后一个星期天
- tensorflow 开始——创建定制化 Estimator(创建自定义评估器)
- 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能
- Python笔记-Json转DataFrame(基金主题Json数据)
- PPP Over Frame Relay配置
- 华为澄清:公司副总裁未发表中美技术还差两万五千里表述
- Python内置容器(2)——字典,迭代器,列表解析
- 用Hexo制作自己的静态博客
- Spring从入门到精通(二)—Spring核心思想之IOC
- 大数据基础课17 大数据环境下如何保护隐私
- echarts+vue3实战(1)
- Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码
- Python 时间序列异常点检测 | 详解 S-ESD 和 S-H-ESD
- 大型网站架构演变过程、大并发服务器架构
- tp-link tl-wr740n 虚拟服务器,TP-Link TL-WR740N无线路由器的上网设置教程
- 洛谷:P3654 First Step (ファーストステップ)
- 软考初级程序员—计算机基础试题与解析(待补充)
- Windows使用Nginx配置本地文件代理(查看本地资源或图片)
- 新零售的下半场在同城速递中燃起,闪送恐难挑起重担?
- 应用多元统计分析(2)第一章 矩阵代数
热门文章
- 金叉成功率_一个非常强烈的买卖信号:三金叉见顶,三死叉见底,短短10字,但是成功率却远超“金叉买,死叉卖”...
- java单终端登陆_配置终端服务单一登录
- oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
- html有序列表和无序列表互相嵌套,关于列表的嵌套,下列说法正确的是( )。 答案:无序列表和有序列表可以相互嵌套与
之间相当于一个容器,可以嵌套无序列表、有序列表等网页元素...
- python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
- 引用文献管理软件Mendeley
- 图论解决复杂路口红绿灯安排,python语言实现
- Volley学习总结
- 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】
- 单元格格式_单元格格式的用法你知道吗~~