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

LeetCode 5:最长回文子串

1、题目描述

给你一个字符串 s,找到 s 中最长的 回文 子串。

示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"

2、中心扩展法解题

  • 解题思路:回文中心的两侧互相对称。因此,回文可以从他的中心展开,并且只有 2n-1 个这样的中心(一个元素为中心的情况有 n 个,两个元素为中心的情况有 n-1 个)
class Solution {
public:int expand(const std::string& s, int l, int r) {while(l >= 0 && r < s.length() && s[l] == s[r]) {--l;++r;}// 这里需要注意边界问题处理,代码走到这里时,l、r相比回文串的索引都移动了一位return r - l - 1;
}
std::string longestPalindrome(std::string s) {int len = s.length();int m = 0, index = 0;for (int i = 0; i < len; ++i) {int l1 = expand(s, i, i);int l2 = expand(s, i, i + 1);if(std::max(l2, l1) > m) {index = i - (std::max(l2, l1) - 1) / 2;m = std::max(l2, l1);}}return s.substr(index, m);
}
};

3、Dp解题

  • 初始状态:
    1)dp[i][i]=1; //单个字符是回文串
    2)dp[i][i+1]=1 if s[i]=s[i+1]; //连续两个相同字符是回文串
std::string longestPalindrome_dp(std::string s) {int len = s.length();int max = 1, index = 0;std::vector<std::vector<std::uint8_t>> dp = std::vector<std::vector<std::uint8_t>>(len, std::vector<std::uint8_t>(len, 0));for (int i = 0; i < len; ++i) {dp[i][i] = 1;if(i + 1 < len && s[i] == s[i+1]) {dp[i][i+1] = 1;max = 2;index = i;}}for(int i = 3; i <= len; i++) {for(int j = i - 1; j < len; j++) {if(s[j] == s[j - i + 1] && dp[j-i+2][j-1] == 1) {max = i;index = j - i + 1;dp[j-i+1][j]=1;}}}return s.substr(index, max);}
  • 总结,一直对这种斜线充填数据的DP不是很理解,通过这道题目悟出来,一般和个数有关的场景使用这种方式初始化数据。可以理解为是那种确定步长时怎么怎么样,因为这种方式有一个特点,那就是i-j的差值是固定的,也就是说dp[i][j]的含义是[i, j]之间的数据满足什么样的条件。

相关文章:

  • 【java实现+4种变体完整例子】排序算法中【冒泡排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • AI写代码工具分享:Cursor 高效使用攻略与实战秘籍
  • 【图片识别分类】如何快速识别照片中的水印文字,对图片进行关键字分类,快速整理水印相机拍摄图片,基于WPF和腾讯OCR的技术实现
  • QML中的3D功能--自定义着色器开发
  • 实现Azure Synapse Analytics安全地请求企业内部API返回数据
  • Flink框架十大应用场景
  • 嵌入式软件--stm32 DAY 2
  • 为什么浮点数会搞出Infinity和NAN两种类型?浮点数的底层原理?IEEE 754标准揭秘?
  • VSCode安装与环境配置(Mac环境)
  • 【计算机视觉】CV实战项目- Face-and-Emotion-Recognition 人脸情绪识别
  • sqlilabs-Less11 POST注入
  • 一个项目中多个Composer的使用方法
  • LibModbus 主从机通信应用实例
  • 【今日三题】判断是不是平衡二叉树(递归) / 最大子矩阵(二维前缀和) / 小葱的01串(滑动窗口)
  • 【技术派后端篇】 Redis 实现用户活跃度排行榜
  • 数据库备份-docker配置主从数据库
  • IntelliJ IDEA右键快捷方式设置方法
  • Sentinel源码—5.FlowSlot借鉴Guava的限流算法二
  • uniApp小程序保存定制二维码到本地(V3)
  • YOLOv11改进有效涨点专栏:从理论到实战的深度优化指南
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话
  • 神舟十九号载人飞船因东风着陆场气象原因推迟返回
  • 我国首部《人工智能气象应用服务办法》今天发布
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 国家统计局:一季度全国规模以上文化及相关产业企业营业收入增长6.2%
  • 历史新高!上海机场一季度营收增至31.72亿元,净利润增34%