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

动态规划 | part13

647. 回文子串 - 力扣(LeetCode)

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

  • 输入:"abc"
  • 输出:3
  • 解释:三个回文子串: "a", "b", "c"

示例 2:

  • 输入:"aaa"
  • 输出:6
  • 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示:输入的字符串长度不会超过 1000 。

public int countSubstrings(String s) { // dp数组表示的是[i,j]是否为回文串 boolean[][] dp = new boolean[s.length()][s.length()]; int res = 0; for (int i = s.length() - 1; i >= 0; i--) { for (int j = i; j < s.length(); j++) { if (s.charAt(i) == s.charAt(j)) { if (j - i <= 1) { dp[i][j] = true; res++; } else if (dp[i + 1][j - 1]) { dp[i][j] = true; res++; } } else { dp[i][j] = false; } } } return res; }

解题:

dp[i][j]表示字符串s中从索引i到索引j的子串(即s[i...j]是否是回文串

我们的循环顺序非常关键:外层循环i:从字符串的最后一个字符向前遍历到第一个字符(倒序)。内层循环j:从当前i的位置向后遍历到字符串末尾。

  • 为什么要倒序遍历i
    • 因为判断dp[i][j]是否回文时,依赖于内部子串dp[i+1][j-1]的结果。
    • 只有当i从大到小遍历时,计算dp[i][j]时,dp[i+1][...]的结果才已经被计算并存储好了。如果i从小到大遍历,依赖的数据还没算出来,逻辑就会出错

516. 最长回文子序列 - 力扣(LeetCode)

给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。

示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。

示例 2: 输入:"cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"。

提示:

  • 1 <= s.length <= 1000
  • s 只包含小写英文字母
public int longestPalindromeSubseq(String s) { // dp数组表示的是[i,j]的最长回文子串的长度 int[][] dp = new int[s.length()][s.length()]; for (int i = s.length() - 1; i >= 0; i--) { dp[i][i] = 1; for (int j = i + 1; j < s.length(); j++) { if (s.charAt(i) == s.charAt(j)) { dp[i][j] = dp[i + 1][j - 1] + 2; } else { dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]); } } } return dp[0][s.length() - 1]; }

解题:

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

这里的遍历顺序与上一题类似,因为我们的状态是由前面,左下角以及下方数据递推得到的,所以我们需要从下往上,从左往右进行遍历

当我们匹配上的时候,需要dp[i + 1][j - 1] + 2,因为是一次俩个字符,我们统计的是长度,所以需要加2.如果不匹配的情况,我们则需要考虑如果不考虑i,以及不考虑j,二者哪个的长度更大一些。既然两头不一样,它们不可能同时出现在同一个回文子序列的两端。因此,最长回文子序列要么不包含s[i],要么不包含s[j](或者都不包含,但这被前两种情况覆盖了)

http://www.jsqmd.com/news/443106/

相关文章:

  • AI编程工具
  • 基于资源池化的ICT基础设施标准化管理与运维实践
  • 产业园区如何提升科技创新服务能力?
  • 分析2026年电源管理芯片品牌商怎么选择 - 工业品网
  • 中央企业如何加快技术成果的商业化转化?
  • WebUploader插件如何扩展HTML5实现文件夹目录结构的断点续传?
  • 盘点全国物流发货服务公司,安徽点对点物流为何口碑出众? - 工业品牌热点
  • 2026年南京金属地垫定制性价比排名,哪家更胜一筹 - mypinpai
  • 构建标准化链路负载体系:实现ICT基础设施高确定性管理
  • 剖析2026年成都离婚律师优质事务所,各机构优势揭秘 - myqiye
  • 2026年成都推荐一下婚姻律师事务所,性价比高的有哪些 - myqiye
  • 大杂烩
  • Lumion 2026教程:5个步骤打造电影级建筑渲染氛围(无需后期处理)
  • 2026年幼猫猫粮产品多维对比:基于核心营养与吸收率的科学评测解析 - 十大品牌推荐
  • 看看2026年性价比高的空气电加热器商家有哪些 - 工业设备
  • 运动医学产品采购:如何筛选口碑与实力兼备的厂家,sports medicine/内窥镜刨削动力代加工,运动医学公司选哪家 - 品牌推荐师
  • 构建需求分级驱动的ICT网络运维体系实现高确定性管理
  • 2026年权威榜单发布:五大幼猫猫粮产品深度评测与科学选粮指南 - 十大品牌推荐
  • 盘点上海地区高性价比中央空调品牌,聊聊集成空调替代传统空调优势 - 工业品网
  • JQuery如何结合HTML5FileAPI动态解析文件夹子目录并分块上传?
  • 幼猫营养科学进阶:2026年主流幼猫猫粮产品技术格局与趋势解析 - 十大品牌推荐
  • Vue3项目如何用vue-cli集成百度开源上传组件实现文件夹秒传?
  • 2026年新手养猫必看:幼猫猫粮产品选型指南与精准适配场景实测 - 十大品牌推荐
  • Python数据分析项目实战(013)——数据分析统计常见指标
  • 2026年可开动坦克模型年度排名,靠谱品牌哪家好 - 工业品网
  • Python数据分析项目实战(014)——NumPy常用函数
  • 2026年用户口碑实证幼猫猫粮推荐:五款产品真实喂养效果全面对比 - 十大品牌推荐
  • 2026年用户口碑实证猫粮产品推荐:五款真实喂养体验与健康效果观察 - 十大品牌推荐
  • AI虚拟试穿又进化了:这个开源项目太猛了,无需抠图就能直接换装
  • 完整教程:VR 大空间热潮,有哪些看点?