文章目录

  • 题目描述
  • 思路 & 代码
    • 二刷
    • 三刷

题目描述

  • 算是很高频的面试题了,而且题号还挺后的

思路 & 代码

  • 注意: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、动态规划、字符串)相关推荐

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

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

  2. leetcode 1143. Longest Common Subsequence | 1143. 最长公共子序列(动态规划,暴力递归->傻缓存->dp)

    题目 https://leetcode.com/problems/longest-common-subsequence/ 题解 经典的 暴力递归 -> 傻缓存 -> dp 题目,以 &qu ...

  3. LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)

    LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...

  4. leetcode - 1143. 最长公共子序列

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

  5. leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)

    文章目录 718. 最长重复子数组 题目描述 思路分析 完整代码 1143. 最长公共子序列 1035. 不相交的线: 这三道题思路基本一样,尤其是最后两道,代码都一样,一点不需要改的,所以放一起把. ...

  6. 1143.最长公共子序列

    1143.最长公共子序列 文章目录 1143.最长公共子序列 一.题目描述 二.方法一:暴力法 三.方法二.动态规划 四.补充:打印输出最长公共子串 五:心得体会 1143. 最长公共子序列 一.题目 ...

  7. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

  8. 【BZOJ2423】最长公共子序列(动态规划)

    [BZOJ2423]最长公共子序列(动态规划) 题面 BZOJ 洛谷 题解 今天考试的时候,神仙出题人\(fdf\)把这道题目作为一个二合一出了出来,我除了orz还是只会orz. 对于如何\(O(n^ ...

  9. [Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]

    [问题描述][中等] [解答思路] 时间复杂度:O(N^2) 空间复杂度:O(N^2) class Solution {public int longestCommonSubsequence(Stri ...

  10. Leetcode 1143.最长公共子序列(求长度)

    Time: 20190906 Type: Medium 题目描述 给定两个字符串text1和text2,返回它们的最长公共子序列. 子序列是通过原字符串删除一些字符(可以不删)生成的新的字符串,不改变 ...

最新文章

  1. java判断星期天_java实现一个月的最后一个星期天
  2. tensorflow 开始——创建定制化 Estimator(创建自定义评估器)
  3. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能
  4. Python笔记-Json转DataFrame(基金主题Json数据)
  5. PPP Over Frame Relay配置
  6. 华为澄清:公司副总裁未发表中美技术还差两万五千里表述
  7. Python内置容器(2)——字典,迭代器,列表解析
  8. 用Hexo制作自己的静态博客
  9. Spring从入门到精通(二)—Spring核心思想之IOC
  10. 大数据基础课17 大数据环境下如何保护隐私
  11. echarts+vue3实战(1)
  12. Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码
  13. Python 时间序列异常点检测 | 详解 S-ESD 和 S-H-ESD
  14. 大型网站架构演变过程、大并发服务器架构
  15. tp-link tl-wr740n 虚拟服务器,TP-Link TL-WR740N无线路由器的上网设置教程
  16. 洛谷:P3654 First Step (ファーストステップ)
  17. 软考初级程序员—计算机基础试题与解析(待补充)
  18. Windows使用Nginx配置本地文件代理(查看本地资源或图片)
  19. 新零售的下半场在同城速递中燃起,闪送恐难挑起重担?
  20. 应用多元统计分析(2)第一章 矩阵代数

热门文章

  1. 金叉成功率_一个非常强烈的买卖信号:三金叉见顶,三死叉见底,短短10字,但是成功率却远超“金叉买,死叉卖”...
  2. java单终端登陆_配置终端服务单一登录
  3. oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
  4. html有序列表和无序列表互相嵌套,关于列表的嵌套,下列说法正确的是( )。 答案:无序列表和有序列表可以相互嵌套与 之间相当于一个容器,可以嵌套无序列表、有序列表等网页元素...
  5. python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
  6. 引用文献管理软件Mendeley
  7. 图论解决复杂路口红绿灯安排,python语言实现
  8. Volley学习总结
  9. 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】
  10. 单元格格式_单元格格式的用法你知道吗~~