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

最长公共子序列---dp

思路:

看似好像可以用双指针或者map集合写,但仔细想一下还是行不通。

dp[i]表示text1在第i个位置上最长的公共子序列。

首先记住一句话,两个字符串做比较,求最长公共子序列,通常用二维dp。

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 = 1;i <= m;i ++){ for(int j = 1;j <= n;j ++){ char ch1 = text1.charAt(i - 1); char ch2 = text2.charAt(j - 1); if(ch1 == ch2){ 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]; } }

为什么不能直接写成 m 和 n?

假设:

text1 = "abcde"; // m = 5 text2 = "ace"; // n = 3

如果你写:

int[][] dp = new int[m][n];

数组大小就是:

dp[5][3]

它的合法下标是:

行:0 ~ 4 列:0 ~ 2

但是你的代码最后返回的是:

return dp[m][n];

也就是:

return dp[5][3];

这就越界了,因为最大只能访问:

dp[4][2]

所以会报错:

ArrayIndexOutOfBoundsException
http://www.gsyq.cn/news/1379018.html

相关文章:

  • UE4SS:解锁虚幻引擎游戏的无限可能性,让每个玩家都能成为创造者
  • 基于A2A协议将智能体注册到Nacos3.x
  • 5分钟掌握文件完整性验证:HashCalculator终极免费批量哈希计算工具指南
  • 如何用YOLOv5实现FPS游戏智能瞄准:完整实战指南
  • PTP实现亚毫秒级同步
  • 基于OTA与锗管的复古过载效果器:从原理到DIY实战
  • 摄影老司机_给照片加边框工具
  • 如何在Windows上轻松查看和转换iPhone HEIF图片:HEIF实用工具指南
  • 【C++修仙录02】筑基篇:vector 使用
  • VMnet8 的8到底是什么意思?
  • 融合教育影子教师证交钱前怎么判断机构是否正规 - 最新教育培训热点
  • 1、从 Harness 到 Hermes:当 AI 学会为自己套上缰绳,自改进智能体时代已来
  • 抖音批量下载工具:如何高效自动化获取用户主页全作品
  • 三方物流平台-toB客户全生命周期详解
  • 10分钟快速上手:Nintendo Switch游戏备份终极指南
  • Java 第五章第六章 案例教程
  • 龙岩6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 在好靶场的WEB海洋遨游
  • 终极指南:5步精通开源网页版三国杀无名杀
  • Whisper-WebUI:一站式语音转字幕解决方案在Mac上的完美部署指南
  • 亳州6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 从零到一:163MusicLyrics跨平台歌词提取工具的完整使用指南
  • 实战指南:Happy Island Designer 的深度应用与优化
  • Safe Exam Browser 虚拟化检测绕过技术深度实践
  • 《Java 100 天进阶之路》第32篇:Java常用工具类(Objects、Collections、Arrays深入)
  • Python渗透测试开源项目源码精读指南:从状态机到零拷贝解析
  • 手机HTTPS抓包失败的根源与系统化排障指南
  • C++特有的bool变量使用
  • 在C++中测量代码执行时间的两种方法
  • 江苏启东寄快递省钱指南|全网高性价比寄件渠道盘点,日常寄件少花冤枉钱 - 时讯资讯