代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列

四十六天打卡,今天用动态规划解决回文问题,回文问题需要用二维dp解决


647.回文子串

题目链接

解题思路

  • 没做出来,布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

  • 当s[i]与s[j]不相等,dp[i][j]一定是false。

  • 当s[i]与s[j]相等时

    • 情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串
    • 情况二:下标i 与 j相差为1,例如aa,也是回文子串
    • 情况三:下标:i 与 j相差大于1的时候,例如cabac,此时s[i]与s[j]已经相同了,我们看i到j区间是不是回文子串就看aba是不是回文就可以了,那么aba的区间就是 i+1 与 j-1区间,这个区间是不是回文就看dp[i + 1][j - 1]是否为true。
  • dp[i][j]初始化为false。

  • 情况三是根据dp[i + 1][j - 1]是否为true,在对dp[i][j]进行赋值true的。

    dp[i + 1][j - 1]dp[i][j]的左下角

    所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的

  • 注意因为dp[i][j]的定义,所以j一定是大于等于i的,那么在填充dp[i][j]的时候一定是只填充右上半部分

在这里插入图片描述

动态规划

class Solution {
public:int countSubstrings(string s) {vector<vector<bool>>dp(s.size(), vector<bool>(s.size(), false));int result = 0;for (int i = s.size() - 1; i >= 0; i--) {for (int j = i; j < s.size(); j++) {if (s[i] == s[j]) {if (j - i <= 1) {result++;dp[i][j] = true;}else if (dp[i + 1][j - 1]) {result++;dp[i][j] = true;}}}}return result;}
};

516.最长回文子序列

题目链接

解题思路

  • dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]
  • 如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;
  • 如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);

在这里插入图片描述

动态规划

class Solution {
public:int longestPalindromeSubseq(string s) {vector<vector<int>>dp(s.size(), vector<int>(s.size()));for (int i = s.size() - 1; i >= 0; i--) {for (int j = i; j < s.size(); j++) {if (s[i] == s[j]) {if (i == j) dp[i][j] = 1;else if(i - j == 1) dp[i][j] = 2;else dp[i][j] = dp[i + 1][j - 1] + 2;} else {dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);}}}return dp[0][s.size() - 1];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1560259.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO11改进|SPPF篇|引入YOLOv9提出的SPPELAN模块

目录 一、【SPPELAN】模块1.1【SPPELAN】模块介绍1.2【SPPELAN】核心代码 二、添加【SPPELAN】模块2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【SPPELAN】模块 1.1【SPPELAN】模块介绍 下图是【SPPELAN】的结构图&#xff0c;让我们…

手游和应用出海资讯:字节跳动《Lemon8》在美下载量飙升;美团海外版《Keeta》进军沙特市场

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为10月第一周资讯&#xff1a; ● OpenAI Sora负责人加盟 Google DeepMind ● 字节跳动《Lemon8》登顶美国App Store排行榜 ● 消息称腾讯与Guillemot家族考虑收购育碧 ● OpenAI官宣获66亿美元融资 ●…

Could not get JDBC Connection: wait millis 10000, active 500

Could not get JDBC Connection: nested exception is com,alibaba,druid.pool,GetConnectionTimeoutException: wait millis 10000, active 500 1、生产突然出现这样的问题&#xff0c;后经过各种分析查找 jmap -dump:formatb,filewar_l.hporf 10333 ‌jmap -dumpb命令用于生成…

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址&#xff1a;https://arxiv.org/pdf/2003.01332 异构图构建教程&#xff1a;异构图构建 异构图转同构图&#xff1a;异构图转同构图 HGTConv语法格式 dgl.nn.…

示教器界面介绍

1. 示教器外部按键介绍 1. 程序编辑完成后&#xff0c;可以热插拔示教器&#xff0c;按下拔出示教器按钮 2. 模式切换旋钮&#xff0c;切换到水平状态进行模式选择&#xff1a;T1手动低速、T2手动高速、自动模式、外部自动模式&#xff0c;选择完成后&#xff0c;模式切换旋钮…

数据质量指标:如何衡量数据的准确性

数据质量是任何数据驱动运营的重要组成部分。即使对于不打算将数据集出售给其他公司的企业&#xff0c;数据的质量和准确性也会极大地影响决策效率。 不幸的是&#xff0c;没有单一指标可以确保数据质量达到标准。您必须跟踪多个指标并不断关注它们。因此&#xff0c;维护数据…

阅读摘抄(七)——The best approach to address the misuse of body ideals

adj.道德的,伦理的,环保的,(药品)凭处方出售的 n/v.误用,滥用 v.虐待,不公平对待Relying on ethical persuasion rather than law to address the misuse of body ideals may bev.相信,依赖 n.说服力 persuade v.说服,劝服,使相信,使信服 …

【案例】—— 基于OpenCV方法的指纹验证

一、案例整体介绍 下图中上面一张指纹图片与下面两张图片中的其中一个指纹是同一个指纹分别将上面的指纹图片与下面的两张图片进行匹配验证在model(模板指纹图片)与验证的两张指纹图片的2次匹配中&#xff0c;分别需要提取出模板指纹图片与验证指纹图片的特征(特征检测)&#…

【论文阅读】SRCNN

学习资料论文题目&#xff1a;Learning a Deep Convolutional Network for Image Super-Resolution&#xff08;学习深度卷积网络用于图像超分辨率&#xff09;论文地址&#xff1a;link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf代码&#xff1a;作者提出的…

Vue检测获取最新资源 解决浏览器缓存问题

Vue检测获取最新资源 解决浏览器缓存问题 1、在public文件夹下创建version.json文件2、vue.config.js中&#xff0c;每次打包动态更新version.json内容3、App.vue中使用定时器去检测版本号和本地是否有差异 背景&#xff1a;由于浏览器缓存问题&#xff0c;vue2项目发布后&…

【HTML】defer 和 async 属性在 script 标签中分别有什么作用?

需要这两个属性的原因&#xff1f; 首先我们要知道的是&#xff0c;浏览器在解析 HTML 的过程中&#xff0c;遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建&#xff0c;首先去下载 js 代码&#xff0c;并且执行 js 的脚本&#xff1b;只有在等到 js 脚本执行…

selenium自动化测试之Junit

1. 常用的注解 将junit的索引添加到pom文件&#xff1a; <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…

CPU超线程技术是什么,怎么启用超线程技术

超线程技术是一种允许单个物理CPU核心模拟成两个逻辑核心的技术&#xff0c;从而提升处理器的并行性能和效率。以下是对超线程技术的详细介绍&#xff1a; 基本概念&#xff1a;超线程&#xff08;Hyper-Threading&#xff0c;HT&#xff09;是Intel公司研发的一种技术&#x…

QD1-P12 HTML常用标签:表格

本节学习 HTML常用标签&#xff1a;表格标签table ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p12 ‍ 知识点1 表格的基本结构 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>P12-表格标签</title><…

SpringBoot整合web中使用jsp

1、在pom.xml文件中导入jsp依赖的jar包&#xff0c;一个是jstl标签&#xff0c;一个是jsp的引擎 <dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version> <…

如何在RuoYi-Vue项目中去除`/dev-api`前缀

前言 在使用RuoYi-Vue框架进行Web应用开发时&#xff0c;有时会遇到API路径需要特定前缀的问题。例如&#xff0c;在某些情况下&#xff0c;开发者可能希望移除或更改默认的/dev-api前缀。 问题描述 当使用YApi直接请求后台接口时&#xff0c;无需添加/dev-api前缀。在生成和…

Java入门——变量

变量和内存紧密联系在一起&#xff0c;主要通过以下方式实现关联&#xff1a; 一、变量的定义与内存分配 变量声明&#xff1a; 当在编程语言中声明一个变量时&#xff0c;编译器或解释器会根据变量的类型在内存中为其分配一块特定大小的空间。 例如&#xff0c;在 C 语言中声明…

包材推荐中的算法应用|得物技术

目录 一、业务背景 二、算法架构 规则算法 三、算法原理 装箱装袋 四、衍生应用 切箱合包箱型设计包装方案推荐 五、作者结语 一、业务背景 任何一家电商的商品出库场景中&#xff0c;都涉及到打包——即把订单中的商品用包材进行包裹&#xff0c;常见的打包方式有装袋和装箱。…

算法复杂度 (数据结构)

一. 数据结构前言 1.1 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用&#xff0c;所以我们要学各式各样的数据结构&#xff0c;如&#xff1…

[Qt] 信号与槽:深入浅出跨UI与跨线程的信号发送

文章目录 如何自定义信号并使用自定义信号的步骤1.使用 signals 声明信号2. 信号的返回值是 void3. 在需要发送信号的地方使用 emit4. 使用 connect 链接信号和槽5. 完整代码示例总结 如何跨UI发送信号Qt跨UI发送信号机制详解案例概述Qt 信号与槽机制简介代码逻辑详解主窗口 Wi…