刷题之动态规划-回文串

前言

大家好,我是jiantaoyab,开始刷动态规划的回文串类型相关的题目

动态规划5个步骤

  1. 状态表示 :dp数组中每一个下标对应值的含义是什么>dp[i]表示什么
  2. 状态转移方程: dp[i] 等于什么
  3. 1 和 2 是动态规划的核心步骤,第三步是初始化,保证填表的时候不越界
  4. 填表顺序:为了保证填写当前状态的时候,所需要的状态已经计算过
  5. 返回值

回文子串

image-20240408083127417

题目分析

image-20240408091944564

代码

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

最长回文子串

image-20240408093514656

代码

动态规划版本

class Solution {
public:string longestPalindrome(string s) {int n = s.size();vector<vector<bool>> dp(n, vector<bool>(n));int len = 1, begin = 0;for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j]) dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;if(dp[i][j] && j - i + 1 > len){len = j - i + 1;begin = i;}}}return s.substr(begin, len);}
};

中心探测法

image-20240408101013524

class Solution {
public:string longestPalindrome(string s) {string RetStr="";for(int i=0;i<s.size();i++){//回文串为奇数int left=i-1;int right=i+1;while(left>=0&&right<s.size()&&s[left]==s[right]){left--;right++;}if(RetStr.size()<right-left-1){//babad//01234  letf=-1 i=1  right=3RetStr=s.substr(left+1,right-left-1);}//回文串为偶数left=i;right=i+1;while(left>=0&&right<s.size()&&s[left]==s[right]){left--;right++;}if(RetStr.size()<right-left-1){RetStr=s.substr(left+1,right-left-1);}}return RetStr;}
};

分割回文串 IV

image-20240408101159072

代码

class Solution {
public:bool checkPartitioning(string s) {int n = s.size();vector<vector<bool>> dp(n, vector<bool>(n));int count = 0;for(int i = n - 1; i>= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j] ) dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;}}//枚举第二个字符串的起始位置和结束位置for(int i = 1; i < n - 1; i++) //前后留一个字符给第一个字符串{for(int j = i; j < n - 1; j++)//结束位置从i开始到n - 1{if(dp[0][i - 1] && dp[i][j] && dp[j + 1][n - 1] ) return true;}}return false;}
};

分割回文串 II

image-20240409162018368

题目分析

image-20240409165941296

代码

class Solution {
public:int minCut(string s) {int n = s.size();vector<vector<bool>> is_pal(n, vector<bool>(n));int ret = 0;//把所有子串是不是回文串放到is_pal中for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j]) is_pal[i][j] = i + 1 < j ? is_pal[i + 1][j - 1] : true;}}vector<int> dp(n, INT_MAX);for(int i = 0; i < n; i++){if(is_pal[0][i]) dp[i] = 0;// [0, i] 不是回文串else{for(int j = 1; j <= i; j++){if(is_pal[j][i]) dp[i] = min(dp[i], dp[j - 1] + 1);}}}return dp[n - 1];}
};

最长回文子序列

image-20240410080452774

题目分析

image-20240410083625603

代码

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();vector<vector<int>> dp(n, vector<int>(n));//填表从下到上,左到右填for(int i = n - 1; i >= 0; i--){dp[i][i] = 1; // i == jfor(int j = i + 1; j < n; j++){if(s[i] == s[j]){if(i + 1 == j) dp[i][j] = 2;else if(i + 1 < j) dp[i][j] = dp[i + 1][j - 1] + 2;}else{dp[i][j] = max(dp[i][j - 1], dp[i + 1][j]);}}}return dp[0][n - 1];}
};

让字符串成为回文串的最少插入次数

image-20240410084528577

题目分析

image-20240410085752956

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两数之和-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第51讲。 两数之和&#xf…

SqlServer功能性配置选择

功能性配置 下面的是必选的

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库&#xff0c;别问我为啥&#xff08;就喜欢用一个软件解决所有问题&#xff09; 当然写SQL语句个人还是觉得sqlyog体验最佳&#xff01;

【InternLM 实战营第二期-笔记4】XTuner 微调个人小助手认知

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营&#xff0c;我也将会通过笔记博客的方式记录学习的过程与遇到的问题&#xff0c;并为代码添加注释&#xff0c;希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) XTuner 微调个人小助手…

【笔记】探索生成范式:大型语言模型在信息提取中的作用

探索生成范式&#xff1a;大型语言模型在信息提取中的作用 摘要介绍 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&am…

文献分享:《基于中国人群的BRCA胚系突变筛查专家共识(2024年版)》

&#xff3b;摘要&#xff3d; BRCA基因&#xff08;包括BRCA1和BRCA2&#xff09;的胚系突变是家族性乳腺癌、卵巢癌等肿瘤的核心风险因素。在人群中&#xff0c;特别是已有肿瘤家族史的高危人群中&#xff0c;BRCA基因检测可以发挥预防性管理作用&#xff0c;有助于降低此类遗…

bugku-web-安慰奖

提示备份 开始扫后台 得到备份文件index.php.bak 得到php代码 <?phpheader("Content-Type: text/html;charsetutf-8"); error_reporting(0); echo "<!-- YmFja3Vwcw -->"; class ctf {protected $username hack;protected $cmd NULL;public f…

【攻防世界】supersqli(堆叠注入)

进入题目环境&#xff0c;有输入框与注入参数&#xff0c;推测类型为SQL注入&#xff1a; 测试--注入类型为数字型还是字符型&#xff0c;构造payload&#xff1a;?inject1 or 12 并提交&#xff1a; 发现页面依然正常&#xff0c;说明注入类型为字符型&#xff0c;则继续检查…

Java基于微信小程序的校园订餐系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

SQL语言

一、DDL数据库定义语言 1、登录mySQL mysql -u"用户名" -p"密码" -h"登录地址 -h&#xff1a;默认为本机 示例&#xff1a; 2、查看当前存在的数据库 show databases; 示例&#xff1a; 3、创建数据库database create…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

关于Git的一些基础用法

关于Git的一些基础用法 1. 前言2. 使用GitHub/gitee创建项目2.1 创建账号2.2 创建项目2.3 下载仓库到本地2.4 提交代码到远端仓库2.5 查看日志2.6 同步远端仓库和本地仓库 1. 前言 首先说一个冷知识&#xff08;好像也不是很冷&#xff09;&#xff0c;Linux和git的创始人是同…