当前位置: 首页 > news >正文

LeetCode热题--1143. 最长公共子序列--中等

题目

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:
输入:text1 = “abcde”, text2 = “ace”
输出:3
解释:最长公共子序列是 “ace” ,它的长度为 3 。

示例 2:
输入:text1 = “abc”, text2 = “abc”
输出:3
解释:最长公共子序列是 “abc” ,它的长度为 3 。

示例 3:
输入:text1 = “abc”, text2 = “def”
输出:0
解释:两个字符串没有公共子序列,返回 0 。

题解

classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){char[]t=text2.toCharArray();intm=t.length;int[]f=newint[m+1];for(charx:text1.toCharArray()){intpre=0;// f[0]for(intj=0;j<m;j++){inttmp=f[j+1];f[j+1]=x==t[j]?pre+1:Math.max(f[j+1],f[j]);pre=tmp;}}returnf[m];}}

解析

出自:教你一步步思考动态规划:从记忆化搜索到递推(Python/Java/C++/Go)

classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){// 将 text2 转换为字符数组,便于快速访问每个字符char[]t=text2.toCharArray();// 获取 text2 的长度,记为 mintm=t.length;// 创建一维 DP 数组 f,长度为 m+1;f[j] 表示当前 text1 前缀与 text2[0..j-1] 的 LCS 长度// 初始时所有值为 0(因为未开始匹配)int[]f=newint[m+1];// 遍历 text1 中的每一个字符 xfor(charx:text1.toCharArray()){// pre 用于保存上一轮(即 text1 上一个字符处理时)的 f[j] 值,// 相当于二维 DP 中的 dp[i-1][j-1]intpre=0;// 对应 f[0],即空字符串与任意前缀的 LCS 长度为 0// 遍历 text2 的每个位置 j(从 0 到 m-1)for(intj=0;j<m;j++){// 先保存当前 f[j+1] 的旧值(即上一行的 dp[i-1][j+1]),// 因为它将在下一次循环中作为 "pre"(即 dp[i-1][j])使用inttmp=f[j+1];// 状态转移:// 如果当前字符 x == t[j],说明可以扩展 LCS:f[j+1] = pre + 1// 否则,取不包含 x 或不包含 t[j] 的最大值:max(f[j+1], f[j])f[j+1]=x==t[j]?pre+1:Math.max(f[j+1],f[j]);// 更新 pre 为 tmp(即上一行的 f[j+1]),供下一次 j 循环使用pre=tmp;}}// 最终结果存储在 f[m] 中,表示 text1 与整个 text2 的 LCS 长度returnf[m];}}
http://www.jsqmd.com/news/221514/

相关文章:

  • 降低AI生成内容重复率的实用工具与核心策略指南
  • Elasticsearch入门学习:完整指南之配置与启动流程
  • elasticsearch下载后初始化设置:超详细版教程
  • 老板让我用springboot对接第三方,如何更优雅的对接
  • AIGC去重必备:官方工具横向测评与原理深度解读
  • 学霸同款10个AI论文软件,助你轻松搞定本科论文!
  • 提升AIGC原创性:十大推荐工具实测与降重逻辑拆解
  • 深度学习OCR入门:CRNN模型原理与实战
  • ZStack Cloud 5.5.0正式发布
  • 十大高效工具解决AIGC重复率问题:实测与理论结合
  • 模拟信号抗干扰策略:工业环境实用指南
  • 午休课桌椅新国标环境下,校金刚的实施方案更有优势
  • DAY49 预训练模型
  • 午休课桌椅新国标环境下,校金刚的实施方案更有优势
  • ModbusRTU从机响应流程实战案例:操作指南详解
  • 深度剖析DRC检查流程:适合初学者的结构化学习路径
  • 手残党也能玩转的S7-200 SMART 485通讯指南
  • 西门子官方精美触摸屏+WINCC程序模板:炫酷扁平式动画、自动生成二维码,实力凸显无线面板和人机界面
  • 超300家企业实测岗位外包口碑品牌榜前10名排名整理!
  • 强烈安利8个AI论文平台,自考学生轻松搞定论文格式规范!
  • 电动汽车充电站有序充放电调度的分散式优化:从理论到实践
  • 权威加冕!搭贝强势入驻钉钉严选,实力与服务获官方高度认可!
  • React Native快速上手:用StyleSheet创建美观界面
  • RTOS环境下ISR编写注意事项全面讲解
  • 基于SpringBoot的零工市场服务系统(源码+lw+部署文档+讲解等)
  • 使用Screen to Gif制作教学视频的完整指南
  • 比亚迪逆风突围:2025年销量飙升62%,海狮7热销单月冲破3千!
  • 全加器P管N管配比原理:从零实现稳定电压传输
  • 手把手教你掌握时序逻辑电路基本原理
  • 高频信号处理篇---单差分对VS双差分对