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

647. 回文子串

题目:

在这里插入图片描述
第一次思考:

  1. 首先想到打直球

实现:


class Solution {
public:bool count(string s,int i,int j){bool ref=true;while(i<j){if (s[i++]!=s[j--]){ref=false;break;}}return ref;}int countSubstrings(string s) {int ref=0;for(int i=0;i<s.size();i++){for (int j=i;j<s.size();j++){if (count(s,i,j))ref++;}}return ref;}
};

解释:

  1. 对于每个子串去判断是不是回文

第二次思考:

  1. 第一次的还是太慢了,慢在对于每一个子串都需要进行一次传统的回文串判断
  2. 于是想到(涉及子串)动态规划
  3. 难在转移方程:对于每个需要判断的字符串,首先首尾相等,其次去除掉首尾后的子串也是回文串。

实现:


class Solution {
public:int countSubstrings(string s) {int ref=0;int size=s.size();vector<vector<bool>> dp(size,vector<bool>(size,false));for (int i=0;i<size;i++){dp[i][i]=true;}int length=1;while (length<size){int l=0;int r=l+length;while (r<size){if (s[l]==s[r]){if (length<2||dp[l+1][r-1]){dp[l][r]=true;}}l++;r++;}length++;}for (int i=0;i<size;i++){for (int j=i;j<size;j++){if (dp[i][j])ref++;}}return ref;}
};

第三次思考:

  1. 如果不使用动态规划,就可以省下dp的空间了
  2. 使用中心扩展法
  3. 使用中心扩展法需要考虑s的size的奇偶性,于是使用manacher改版

实现:


class Solution {
public:int countSubstrings(string s) {int ref=0;string manachered="";manachered.push_back('#');for (auto c:s){manachered.push_back(c);manachered.push_back('#');}ref=manachered.size();for (int i=0;i<manachered.size();i++){int l=i-1;int r=i+1;while(l>=0&&r<manachered.size()){if (manachered[l]==manachered[r]){ref++;}else{break;}l--;r++;}}return ref;}
};
http://www.xdnf.cn/news/1053865.html

相关文章:

  • AI驱动SEO关键词精准布局
  • PMP成本管理时,合同成本的计算和注意事项
  • 耗时3小时,把这两天做好的爬虫程序,用Python封装成exe文件
  • 构建高性能日志系统:QGroundControl日志模块深度解析
  • 【JavaEE】(2) 多线程1
  • 第3章 C#编程概述 笔记
  • 计算机求职提前批/求职什么时候投递合适
  • 宝塔部署.net项目(nopcommerce)
  • K-Means算法详细解析:从原理到实践
  • C++ STL常用二分查找算法
  • 2025年品牌定位推荐排行榜:锚定市场航向,解锁品牌增长新势能
  • Python+QT远程控制助手-ver2
  • 《注解的江湖:一场元数据的“宫斗剧”》
  • 每日算法刷题Day32 6.15:leetcode枚举技巧7道题,用时1h10min
  • 计网复习知识(17)应用层
  • jQuery 3D透明蓄水池状柱状图插件
  • IDA动态调试环境配置全流程
  • 【Markdown】基础用法汇总(标题、列表、链接、图片、加粗斜体、上下角标、引用块、代码块、公式)
  • 学习日记-day30-6.15
  • Linux安装LLaMA Factory
  • Netty 全面深入学习指南
  • 项目实训个人工作梳理
  • 【算法 day03】LeetCode 203.移除链表元素 | 707.设计链表 | 206.反转链表
  • nodejs中Express框架的基本使用
  • ​​信息系统项目管理师-项目范围管理 知识点总结与例题分析​​
  • Claude Code 实用教程——使用方法详解
  • 庙算兵棋推演AI开发初探(8-神经网络模型接智能体进行游戏)
  • 文本预测和分类任务
  • [笔记] 基于esp32s3用GUI-Guider-1.9.1-GA开发LVGL界面
  • 认识电子元器件之磁传感器