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

动态规划-回文串问题——5.最长回文子串

1.题目解析

题目来源:5.最长回文子串——力扣 

测试用例 

2.算法原理

1.状态表示

判断回文子串需要知道该回文子串的首尾下标,所以需要一个二维数组且数据类型为bool类型来存储每个子字符串是否为回文子串,

即dp[i][j]:以第i个位置为起始,第j个位置为结尾的子字符串是否为回文子串

2.状态转移方程

当需要判断的子字符串长度小于3可以直接判断是否相等,相等则直接为true,反之则为false

当长度大于3时则需要向中间判断,也就是将长字符串拆分为单个字符穿与两个字符串的情况即可

3.初始化

无需初始化,因为dp表存储的值为bool类型,因此在填表的过程中就动态的将每个位置赋了值

4.填表顺序

因为需要可能用到dp[i+1][j-1]也就是二维表的左下位置,因此需要从下向上填表

5.返回值

这里的dp表每个位置存储的都是该子字符串是否为回文子串,因此需要逐个判断找出最长的回文子串并求出其起始位置与长度,然后返回该子字符串即可

3.实战代码

代码分析 

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);}
};

 


http://www.mrgr.cn/news/63569.html

相关文章:

  • 代码随想录 -- 动态规划 -- 不同路径 II
  • 【JVM详解JVM优化】JVM内存模型
  • 棋牌游戏防ddos攻击,高防IP好用吗?
  • ssm+vue656基于JAVA的校园失物招领平台的设计与实现
  • 无人机之感知避让技术篇
  • Ubuntu中VSCode以sudo开始GDB调试C程序方法
  • 【UML】- 用例图(结合银行案例解释其中的奥义)
  • 残差块(Residual Block)
  • [每日一练]分组后元素最多的组别(all函数的全局比对)
  • 品牌怎么找到用户发的优质内容,进行加热、复制?
  • YOLO——yolo v4(1)
  • 修改Windows远程桌面3389端口
  • 1008:计算(a+b)/c的值
  • 【视频】OpenCV:识别颜色、绘制轮廓
  • 文本文件、二进制文件常见格式
  • 【分立元件】贴片电阻过电压故障机理
  • 【BUG分析】clickhouse表final成功,但存在数据未合并
  • Java: 遍历 Map
  • 优化宝典:数据库性能提升指南
  • 脉冲当量计算方法
  • HJ53 杨辉三角的变形
  • Java 21 新特性来支持并发编程
  • 2024 年 11 月 1 日 deepin 23 内测更新公告
  • 大厂面试真题-很多系统会使用netty进行长连接,连接太多会有问题吗
  • 关于方法的定义上面有无static的对比
  • 算法笔记()