动态规划解决回文子串问题

前言:

回文串相关问题在我们的算法题中算是老生常谈,本文主要介绍如何使用动态规划的思路去解决回文串系列问题。

总体思路:

能够将所有的子串是否是回文的信息,存储在二维dp表中。有了这个dp表,就可以将hard难度转化为easy难度!

接下来我们按照动态规划五板斧去解决~

1、状态表示

dp[i][j]表示s字符串[i, j] 的子串,是否是回文串。(其中i <= j)

2、状态转移方程

我们根据s[i] 和 s[j] 是否相等来判断dp[i][j]的信息。分两种情况

  • 当s[i] != s[j] 时,dp[i][j] 存储 false,表示s[i] ~ s[j] 之间的字符串不是回文串。
  • 当s[i] == s[j] 时,分为三种情况:
  1. 当 i == j ,表示单个字符,肯定是回文串
  2. 当i + 1 == j ,表示两个字符相邻,肯定也是回文串
  3. 不是上述两种情况时,根据dp[i+1][j-1]来判断,与他相等

 3、初始化

无需初始化,不会有越界问题

4、填表顺序

从下往上填写每一行。并且要保证i <= j ,所以两层for循环中,内层初始值 j 就是外层的 i 

5、返回值

当我们将dp表填完之后,就可以根据题目要求进行解决!


下面带来一道例题:

647. 回文子串

解析:

将dp表填完之后,直接计数表中true个数即可!秒杀!!!

原码:

class Solution {
public:
    int countSubstrings(string s) {
        int n = s.size();
        vector<vector<bool>> dp(n, vector<bool>(n));
        //本题不需要初始化
        
        //从下往上初始化dp表
        int ret = 0;
        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 || i+1 == j) dp[i][j] = true;
                    else
                    {
                        dp[i][j] = dp[i+1][j-1];
                    }
                }
                if(dp[i][j] == true) ret++;
            }
        }
        return ret;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息系统安全与对抗-网络侦查技术与网络扫描技术(期末复习简答题)

1、网络拓扑结构在网络攻击中的作用 查明目标网络的拓扑结构&#xff0c;有利于找到目标网络的关键节点&#xff0c;从而提高攻击效率&#xff0c;达到最大攻击效果。 2、网络侦查在网络攻击中的作用 识别潜在目标系统&#xff0c;确认目标系统适合哪种类型的攻击。 3、百度…

一种简单的小报表本地缓存方案

适应如下场景&#xff1a;关联表多&#xff0c;接口响应慢&#xff0c;报表数据不多&#xff0c;可能就十多行。参数也固定&#xff0c;实时性要求不高&#xff0c;隔那么半小时刷新一次&#xff0c;查询性能要求高&#xff0c;给领导看的&#xff0c;要求很快。 使用示例&…

对camera raw中的纹理和清晰度的内容的修正(之前的内容写错了,懒得改了重新写一篇)

之前对于环的解释&#xff0c;不太行&#xff0c;这里我给出进一步地说明。 首先对环的解释: 我这里说的环指的是频域段中的ai变化的时候对图像像素的变化的极大的影响程度的环状效果&#xff0c;会出现不规则的环状的提亮或增暗的效果。实际上是每个fj都有影响&#xff0c;但…

【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

光学镜片镀膜自动上下料工艺解决方案

在当今竞争激烈的制造业市场中&#xff0c;如何提高产品质量和生产效率成为了企业关注的焦点。富唯镀膜上下料设备以其高精度上下料技术&#xff0c;成为了产业升级的得力助手。 产品介绍 实现功能&#xff1a;富唯镀膜上下料设备拥有先进的设计理念和精湛的技术工艺&#xff…

邓超大胆自嘲让全场观众笑出眼泪

《哈哈哈哈哈》第四季中&#xff0c;邓超大胆自嘲&#xff0c;让全场观众笑出眼泪&#xff01;嫁到上海已久的他&#xff0c;还听不懂上海话&#xff0c;这让老婆孙俪也忍不住笑出声来。这期节目一播出&#xff0c;网友们纷纷表示&#xff1a;“超哥今晚还敢回家吗&#xff1f;…

课程设计 大学生竞赛系统

课程设计 大学生竞赛系统 wx:help-assignment 学生用户&#xff1a; wx:help-assignment 首页&#xff1a;推荐一些竞赛&#xff0c;热门活动等&#xff1b; 广场&#xff1a;用户可以通过广场来发表动态&#xff0c;同时也可以查看别人发布的动态&#xff0c;并且可以 关注…

HOOPS Visualize:工业级3D可视化SDK,打造移动端和PC端工程应用程序

HOOPS Visualize是一种高性能的软件开发工具包&#xff08;SDK&#xff09;&#xff0c;旨在帮助开发人员轻松构建和集成高质量的3D可视化功能。这是一种全功能的&#xff0c;以工程为重点的场景图技术&#xff0c;我们称为Core Graphics。Core Graphics可集成到一个框架中&…

pythonsql-随机问答小程序

随机问答-python&sql 智力问答测试&#xff0c;在答题过程中对做对、做错进行实时跟踪&#xff0c;测试完成后能根据玩家的答题情况给出成绩。 1. 设计思路 程序使用了一个SQLite试题库test.db&#xff0c;其中每个智力问答山题目、4个选项*1-1正确答案组成(question, An…

北斗卫星在农田测量中的广泛应用

北斗卫星在农田测量中的广泛应用 随着科技的不断发展和进步&#xff0c;北斗卫星在农田测量中的应用也越来越广泛。北斗卫星系统是我国自行研制的卫星导航定位系统&#xff0c;具有全球覆盖、高精度和高可靠性的特点&#xff0c;是农田测量领域不可或缺的重要工具。 首先&…

智慧校园的主要功能是什么

随着信息化的发展&#xff0c;智慧校园的应用已经屡见不鲜。智慧校园是新技术与新科技落地的典型案例。智慧校园完善了校园信息化建设体系&#xff0c;推动了教育水平的提升&#xff0c;以下是智慧校园实现的几个比较典型的功能&#xff1a; 1.数字化办公 毋庸置疑&#xff0…

vite创建的项目使用rem适配

下面以创建vue3.0 项目为例&#xff1a; npm init vitelatest “名称” 选择vue &#xff08;选择你所对应的语言&#xff09; 更具提示步骤执行 cd xxx npm i npm run dev 然后再项目中使用 rem 需要安装插件 第一步安装插件 npm i amfe-flexible npm i postcss-pxtorem 第二…

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式&#xff1a;姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例&#xff1a; &#xff08;1&#xff09;求每个学科的平均成绩 &#xff08;2&#xff09;将三门课程中任意一门不及格的学生过滤出来 &#xff08;1&#xff09;求每…

2023年国赛高教杯数学建模C题蔬菜类商品的自动定价与补货决策解题全过程文档及程序

2023年国赛高教杯数学建模 C题 蔬菜类商品的自动定价与补货决策 原题再现 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c;大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据…

TMS320F280049 CLB模块--输入输出连接(1)

输入 下图是CLB外部输入框图&#xff0c;可以经其他外设或GPIO给到CLB X-BAR&#xff0c;然后给到CLB模块内部。 下面是CLB内部输入框图。可以看到CLB内部边界输入有3个来源&#xff1a;全局输入/本地输入/寄存器输入。 另外还可以选择同步/滤波等功能。 下图是信号选择的实例…

死锁调试技巧:工作线程和用户界面线程

有人碰到了一个死锁问题&#xff0c;找到我们想请我们看看&#xff0c;这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们&#xff0c;可能是因为我们经常会和窗口管理器打交道吧。 下面&#xff0c;我们来看看死锁的两个线程。 >> 请移步至 …

ROS架构

ROS文件系统 ROS文件系统级指的是在硬盘上ROS源代码的组织形式&#xff0c;其结构大致可以如下图所示&#xff1a; WorkSpace为自定义的工作空间 其中&#xff0c;build为编译空间&#xff0c;用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 devel为开发空间&am…

C++笔试强训day16

目录 1.字符串替换 2.神奇数 3.DNA序列 1.字符串替换 链接 简单的遍历替换即可&#xff1a; class Solution { public:string formatString(string str, vector<char>& arg) {string ret;int k 0;for (int i 0; i < str.size(); i){if (str[i] %){ret arg…

QT学习(3)——对话框,模态非模态,系统对话框,界面布局,其他控件

目录 引出模态方式非模态方式系统对话框消息框颜色框文件框 界面布局输入框tool按钮单选框多选框listWidgetQTreeWidgetQTableWidget 其他控件stackedWidgetcombox下拉框label标签 总结 引出 QT学习&#xff08;3&#xff09;——对话框&#xff0c;模态非模态&#xff0c;系统…

机器学习-12-sklearn案例02-集成学习

总结 参考 菜菜的sklearn课堂——随机森林 算法使用过程 #导入数据集模块 from sklearn import datasets #分别加载iris和digits数据集 iris datasets.load_iris() #鸢尾花数据集 # print(dir(datasets)) # print(iris_dataset.keys()) # dict_keys([data, target, frame…