当前位置: 首页 > 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.dtcms.com/a/252087.html

相关文章:

  • 进程间通信之进程间传递文件描述符
  • 【JS-1】JavaScript的三种书写位置详解:内联、内部与外部
  • firewalld防火墙(一):基础概念、配置详解与实战应用
  • 数据库核心技术深度剖析:事务、索引、锁与SQL优化实战指南(第六节)-----InnoDB引擎
  • YOLOv4 训练与推理流程详解
  • Java并发编程实战 Day 23:并发系统性能调优
  • Android跨进程通信深度优化:从Binder机制原理到企业级实战指南
  • sparseDrive(2):环境搭建及效果演示
  • 【Linux服务器】-安装zabbix-负载环境(故障自动切换场景)
  • MySQL面试题(完整版一百道经典高频面试题)
  • LDPC码的译码算法
  • Node.js验证码:从生成到验证的趣味之旅
  • 语音转文本ASR、文本转语音TTS
  • 如何在 Elementary OS 上安装 Google Chrome 浏览器
  • Qdrant向量数据库的增删改查
  • 华为OD-2024年E卷-增强的strstr[100分] -- python
  • 通过 BLE 和 Wi-Fi 交换优化基于 ID 的远程无人机通信的延迟
  • ubuntu 22.04 安装部署logstash 7.10.0详细教程
  • VSCODE + EIDE 下 STM32 编程使用部分外设无法通过编译:undefined reference to ‘xxx‘
  • 基于 Transformer RoBERTa的情感分类任务实践总结之五——剪枝
  • 山东大学项目实训-创新实训-法律文书专家系统-项目报告(八)
  • vue中的h渲染函数
  • AI医生24小时在线:你的健康新‘算法监护人
  • 《江西南昌棒垒球》一级运动员 vs 二级运动员·棒球1号位
  • 【C/C++】内核开发之进程调度大纲
  • 2.4k star 开源项目,Wingman AI + 知识图谱,如何帮你搭建‘私人大脑’?学术/项目必备,让笔记真正活起来!
  • Softhub软件下载站实战开发(三):平台管理模块实战
  • 二.TvSettings从Android.bp解析成build.gradle
  • 【Bug】--docker的wsl版本问题
  • Java项目中使用到的技术——《异步调用》