动态规划-647.回文子串-力扣(LeetCode)

article/2025/6/7 22:41:59

一、题目解析

这里的子字符串是连续的,与之前的子序列不同,这里需要我们统计回文子串的数目。

二、算法原理

这里也有其他算法可以解决该问题,如中心扩展算法 时间复杂度O(N^2)/空间复杂度O(1),马拉车算法(具有局限性) 时间复杂度O(N)/空间复杂度O(N),动态规划 时间复杂度O(N^2)/空间复杂度O(N^2)

我们这里使用动态规划,可以将所有子串是否回文的结果保存在dp表中,通过统计dp就能得到回文子串的数目。

1.状态表示

dp[i][j]:表示s字符串[i,j]的子串,是否为回文子串

2.状态转移方程

 根据最后一步划分状态,s[i]与s[j]是否相等,如不等,则子串不为回文子串;如相等则继续判断

dp[i][j] s[i] != s[j]->false

           s[i] == s[j] i == j->true

                            i+1=j->true

                           dp[i+1][j-1]

这里不会出现越界行为,首先状态表示定义的是[i,j]范围的子串,其次上面包括了相邻和相等的情况,所以是不会有越界问题的

3、初始化

由于我们填写的是bool值,不需要初始化

4、填表顺序

 

5、返回值

我们已经统计好了是否为回文子串,所以只需要记录dp表中true的数量即可。

 这种思路同样适用于其他回文子串问题,建议理解后自己动手实现

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

三、代码示例

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

 

看到最后,如果对您有所帮助,还请点赞、收藏和关注,点点关注不迷路,我们下期再见! 


http://www.hkcw.cn/article/kmDtVJRrwo.shtml

相关文章

条形进度条

组件 <template><view class"pk-detail-con"><i class"lightning" :style"{ left: line % }"></i><i class"acimgs" :style"{ left: line % }"></i><view class"progress&quo…

大模型赋能:金融智能革命中的特征工程新纪元

一、AI进化论&#xff1a;从“判别”到“生成”的金融新战场 1.1 判别式AI的“痛点”与大模型的“破局” 想象这样一幅画面&#xff1a;银行风控模型像老式收音机&#xff0c;需要人工反复调试参数才能捕捉风险信号&#xff1b;而大模型则是智能调音台&#xff0c;能自动“听…

HA: Wordy靶场

HA: Wordy 来自 <HA: Wordy ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.130 3&#xff0c;对靶机进行端口服务探…

技巧小结:外部总线访问FPGA寄存器

概述 需求&#xff1a;stm32的fsmc总线挂载fpga&#xff0c;stm32需要访问fpga内部寄存器 1、分散加载文件将变量存放到指定地址即FPGA寄存器地址 sct文件指定变量存储地址&#xff0c;从而可以直接访问外设&#xff0c;&#xff08;28335也可以&#xff0c;不过用的是cmd文件…

深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)

一、重复前缀&#xff1a;串操作的 “循环加速器” 如果你写过汇编代码&#xff0c;一定遇到过需要重复处理大量数据的场景&#xff1a; 复制 1000 字节的内存块比较两个长达 200 字符的字符串在缓冲区中搜索特定的特征值 手动用loop指令编写循环&#xff1f;代码冗长不说&a…

【PCB设计】STM32开发板——原理图设计(电源部分)

一、PCB设计流程 二、准备工作 1.点击文件新建工程并命名 2.新建图页 在绘制较为复杂的原理图时&#xff0c;可以建立多个图页&#xff0c;使得原理图更加清晰。 右击原理图→新建图页 右击→重命名 3.设计规则相关配置 取消勾选第22个 4.调整页面大小 5.放置“电源树”图片…

C++仿RabbitMQ实现消息队列

前言 本项目将使用 C 在 Linux&#xff08;CentOS 7.6&#xff09; 环境下开发一个仿 RabbitMQ 的简易消息队列。 开发和调试环境如下&#xff1a; 操作系统&#xff1a;Linux (CentOS 7.6) 编辑器&#xff1a;Visual Studio Code / Vim 编译器&#xff1a;g&#xff08;GNU…

离散数学_数理逻辑(二):命题逻辑的推理

前言 每一件事都存在现象和本质.现象是表面,本质是内在.数学可以说是自然科学之母,是一切自然现象的本质.对于编程,表面上是在写代码,实际上是在用离散数学理解问题和解决问题. 引入 命题逻辑的推理部分. "推理"在思考中占了很大比重.笔者曾经把学习方法分了两种:一…

KITTI数据集(计算机视觉和自动驾驶领域)

KITTI&#xff08;Karlsruhe Institute of Technology and Toyota Technological Institute at Chicago&#xff09;数据集是计算机视觉和自动驾驶领域中最广泛使用的基准数据集之一。它由德国卡尔斯鲁厄理工学院和美国芝加哥丰田技术研究所联合发布&#xff0c;旨在推动自动驾…

力扣4.寻找两个正序数组的中位数

文章目录 题目介绍题解 题目介绍 题解 题解链接&#xff1a;题解 核心思路&#xff1a;通过二分查找的确定分割点使左右两部分元素数量相等。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int n1 nums1.length;int n2 nums2.length…

Windows下将Nginx设置注册安装为服务方法!

一、需求背景 每次启动 Nginx 都要去到 Nginx 安装目录下寻找 nginx.exe 文件点击&#xff0c;很是麻烦。 并且远程登录桌面&#xff0c;有时注销用户&#xff0c;会把在当前用户打开的nginx关闭了。 于是考虑可不可以跟其它服务一样能够开机自启&#xff1f;显然是可以的。…

web第九次课后作业--SpringBoot基于mybatis实现对数据库的操作

前言 在前面我们学习MySQL数据库时&#xff0c;都是利用图形化客户端工具(如&#xff1a;idea、datagrip)&#xff0c;来操作数据库的。 在客户端工具中&#xff0c;编写增删改查的SQL语句&#xff0c;发给MySQL数据库管理系统&#xff0c;由数据库管理系统执行SQL语句并返回执…

SpringBoot+XXL-JOB:高效定时任务管理

一、前言 在现代应用程序中&#xff0c;定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合&#xff0c;以简化任务调度和管理。本文将带领你探索如何将这两者集成在一起&#xff0c;实现高效的定时任务管理。无论你是初学者还是有经验的开发者…

java-spring

入门案例 通过bean创建对象 先通过spring的ClassPathXmlApplicationContext读取xml文件 ,然后通过getbean()函数获取对象&#xff0c;进行操作通过反射机制&#xff0c;吸纳Class的函数forName(class属性)创建对象&#xff0c;然后clazz.getDeclaredConstructor().newinstanc…

springboot @value

#springboot value value 可以读取 yaml 中 的数据

简单爬虫框架实现

1. 框架功能概述 (1) HttpSession 类&#xff1a;请求管理 功能&#xff1a;封装 requests 库&#xff0c;实现带重试机制的 HTTP 请求&#xff08;GET/POST&#xff09;。关键特性&#xff1a; 自动处理 429&#xff08;请求过多&#xff09;、5xx&#xff08;服务器错误&am…

欢乐熊大话蓝牙知识14:用 STM32 或 EFR32 实现 BLE 通信模块:从0到蓝牙,你也能搞!

&#x1f680; 用 STM32 或 EFR32 实现 BLE 通信模块&#xff1a;从0到蓝牙&#xff0c;你也能搞&#xff01; “我能不能自己用 STM32 或 EFR32 实现一个 BLE 模块&#xff1f;” 答案当然是&#xff1a;能&#xff01;还能很帅&#xff01; &#x1f468;‍&#x1f3ed; 前…

网络攻防技术六:拒绝服务攻击

文章目录 一、拒绝服务攻击概述1、按攻击目标分类2、按攻击方式分类3、按受害者类型分类4、按攻击是否直接针对受害者分类5、按属性分类6、按舞厅分类7、按攻击机制分类 二、剧毒包型拒绝服务攻击1、碎片攻击2、Ping of Death攻击(ICMP Bug攻击&#xff09;3、Land攻击4、循环攻…

阿里云无影云桌面深度测评

阿里云无影桌面深度测评&#xff1a;解锁云端工作“新范式”的“未来之钥”&#xff01; 在数字化浪潮席卷全球的2025年&#xff0c;远程办公与混合办公已不再是权宜之计&#xff0c;而是职场不可逆转的新常态。然而&#xff0c;如何确保员工无论身在何处&#xff0c;都能拥有…

R²AIN SUITE AI知识库助力中国制造业数字化转型

一、市场现状&#xff1a;理性增长中的结构性机遇 走进2025年的中国制造业车间&#xff0c;你会看到这样的矛盾图景&#xff1a;一边是机器人手臂精准焊接的火花四溅&#xff0c;另一边是老师傅对着五套不同系统的屏幕皱眉记录数据。这种割裂感正是当前数字化转型深水区的真实…