【Leetcode 热题 100】1143. 最长公共子序列

news/2025/2/6 7:31:17/

问题背景

给定两个字符串 t e x t 1 text_1 text1 t e x t 2 text_2 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 0 0
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

数据约束

  • 1 ≤ t e x t 1 . l e n g t h , t e x t 2 . l e n g t h ≤ 1000 1 \le text_1.length, text_2.length \le 1000 1text1.length,text2.length1000
  • t e x t 1 text_1 text1 t e x t 2 text_2 text2 仅由小写英文字符组成。

解题过程

比较套路化的动态规划题,注意遇到两个字符相等时必选,不相等时不用考虑都不选的情形就可以了。
滚动数组的写法没能完全理解,暂时不强求。

具体实现

递归

class Solution {private char[] chT1, chT2;private int[][] memo;public int longestCommonSubsequence(String text1, String text2) {chT1 = text1.toCharArray();chT2 = text2.toCharArray();int m = chT1.length;int n = chT2.length;memo = new int[m][n];for (int[] row : memo) {Arrays.fill(row, -1);}return dfs(m - 1, n - 1);}private int dfs(int i, int j) {if (i < 0 || j < 0) {return 0;}if (memo[i][j] != -1) {return memo[i][j];}if (chT1[i] == chT2[j]) {return memo[i][j] = dfs(i - 1, j - 1) + 1;}return memo[i][j] = Math.max(dfs(i - 1, j), dfs(i, j - 1));}
}

递推

class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] chT1 = text1.toCharArray();char[] chT2 = text2.toCharArray();int m = chT1.length;int n = chT2.length;int[][] dp = new int[m + 1][n + 1];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dp[i + 1][j + 1] = chT1[i] == chT2[j] ? dp[i][j] + 1 : Math.max(dp[i][j + 1], dp[i + 1][j]);}}return dp[m][n];}
}

http://www.ppmy.cn/news/1569742.html

相关文章

[ Spring ] Spring Boot Mybatis++ 2025

文章目录 StructureMyBatis Controller AbilitiesConfigure Plugins and RepositoriesApply Plugins and Add DependenciesMyBatis Spring PropertiesMyBatis ApplicationMyBatis BeansMyBatis MapperMyBatis Query Builder Structure this blog introduce 3 ways using mybat…

HarmonyOS NEXT:保存应用数据

用户首选项使用 用户首选项的特点 数据体积小、访问频率高、有加载速度要求的数据如用户偏好设置、用户字体大小、应用的配置参数。 用户搜选项&#xff08;Preferences&#xff09;提供了轻量级配置数据的持久化能力&#xff0c;支持订阅数据变化的通知能力。不支持分布式同…

实验十四 EL和JSTL

实验十四 EL和JSTL 一、实验目的 1、掌握EL表达式的使用 2、掌握JSTL的使用 二、实验过程 1、在数据库Book中建立表Tbook&#xff0c;包含图书ID&#xff0c;图书名称&#xff0c;图书价格。实现在bookQuery.jsp页面中模糊查询图书&#xff0c;如果图书的价格在50元以上&#…

vscode+vue3+高得地图开发过过程中本地视频及地图json文件的发布问题

很久没发blog了&#xff0c;最近vscodevue3高得地图开发中&#xff0c;因为有开发的视频教程&#xff0c;还有地图的边界的.json文件&#xff0c;这些静态文件发布时&#xff0c;如果处理不当&#xff0c;build命令会将这些静态文件进行打包。打包后文件名变化了&#xff0c;这…

DeepSeek的出现对全球GPT产业产生的冲击

引言 近年来&#xff0c;人工智能技术的迅猛发展推动了自然语言处理&#xff08;NLP&#xff09;领域的革命性进步。特别是以GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型为代表的大规模预训练语言模型&#xff0c;已经在全球范围内引发了广泛关注…

python编程-文件和目录操作,字符串操作

python的文件和目录操作主要用到os包。最常用的接口如下&#xff1a; 1. 获取当前工作目录 import os current_dir os.getcwd() print("当前目录:", current_dir) # 输出: /Users/your/path 2. 切换工作目录 os.chdir("/tmp") # 切换到 /tmp 目录 p…

利用TensorFlow.js实现浏览器端机器学习:一个全面指南

引言 随着深度学习技术的不断发展&#xff0c;机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库&#xff0c;它允许开发者在浏览器中直接运行机器学习模型&#xff0c;而无需依赖后端服务器。Tensor…

使用图形化界面和终端配置防火墙安全策略

一、项目简介 防火墙想必大家都很熟悉&#xff0c;电脑自带的防护墙我们都使用过&#xff0c;今天我们进行对企业防火墙USG6000V1这款防火墙使用Web图形化界面和控制终端进行防火墙的安全策略的配置。 二、详细概述 2.1 图谱图的搭建 使用Web图形化的界面和控制台终端来对该防…