力扣 647. 回文子串

题目来源:https://leetcode.cn/problems/palindromic-substrings/description/

C++题解1:暴力解法。不断地移动窗口,判断是不是回文串。

class Solution {
public:int countSubstrings(string s) {int len = s.size();int res = 0;for(int i = 0; i < len; i++) {res++;for(int j = 0; j < i; j++) {// 判断s[j]到s[i]是不是回文子串int tmp = 1;for(int m = j, n = i; m < n; m++, n--){if(s[m] != s[n]) {tmp = 0; break;}}res = res + tmp;}}return res;}
};

C++题解2:动态规划

布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。

当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况

  • 情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串
  • 情况二:下标i 与 j相差为1,例如aa,也是回文子串
  • 情况三:下标:i 与 j相差大于1的时候,例如cabac,此时s[i]与s[j]已经相同了,我们看i到j区间是不是回文子串就看aba是不是回文就可以了,那么aba的区间就是 i+1 与 j-1区间,这个区间是不是回文就看dp[i + 1][j - 1]是否为true。
class Solution {
public:int countSubstrings(string s) {int len = s.size();int res = 0;vector<vector<bool>> dp(len+1, vector<bool>(len+1, false));// 递推// 当s[i]!=s[j],不是回文子串// 当s[i]==s[j]// 如果s[i+1]~s[j-1](夹心)是回文子串,则s[i]~s[j]是回文子串;// 如果s[i+1]~s[j-1](夹心)不是回文子串,则s[i]~s[j]不是回文子串;// 所以dp[i][j] = dp[i+1][j-1]for(int i = len-1; i >= 0; i--) {dp[i][i] = true;for(int j = i; j < len; j++) {if(s[i] == s[j]){if(j - i <= 1) {dp[i][j] = true; res++;}else if(dp[i+1][j-1]) {dp[i][j] = true; res++;}}}}return res;}
};

C++题解3:双指针法(从中心往外)。在遍历中心点的时候,要注意中心点有两种情况

一个元素可以作为中心点,两个元素也可以作为中心点。

class Solution {
public:int countSubstrings(string s) {int len = s.size();int res = 0;for(int i = 0; i < len; i++) {res = res + extend(s, i, i, len);res = res + extend(s, i, i+1, len);}return res;}int extend(const string& s, int i, int j, int len) {int res = 0;while(i >= 0 && j < len && s[i] == s[j]) {res++;i--;j++;}return res;}
};

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

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

相关文章

改进猫群算法丨多车场多车型路径问题求解复现

车间调度系列文章&#xff1a; 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法&#xff1a;算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法&#xff1a;算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库&#xff0c;它是 TinyXML 的一个改进版本&#xff0c;专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库&#xff0c;并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

PyCharm怎么安装Comate与使用示范

目录 简单介绍Comate 安装步骤详解 Comate使用示范详解 使用总结 简单介绍Comate Baidu Comate智能编码助手是一款基于文心大模型打造的编码辅助工具&#xff0c;具备多重优势&#xff0c;包括代码智能、应用场景丰富、创造价值高、广泛应用等。它能帮助开发者提升编码效率…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验&#xff0c;这届考试可能偏向出题更灵活&#xff0c;能死记硬背或套公式的题减少&#xff0c;多做准备呀各位大三苦逼人&#xff0c;挂了补考还得回来补考凸^-^凸共勉 &#xff08;另外&#xff0c;别作弊&#xff0c;今天人工智能考试逮住…

英语学习笔记4——Is this your ...?

Is this your …? 词汇 Vocabulary suit /sut/ n. 西装&#xff0c;正装 suit 的配套&#xff1a; shirt n. 衬衫tie n. 领带&#xff0c;领结belt n. 腰带trousers n. 裤子shoes n. 鞋子 school /skuːl/ n. 学校 所有学校 搭配&#xff1a;middle school 初中    hig…

阿里开源的lowcode-engine:加速企业级应用开发的低代码利器

lowcode-engine 是阿里巴巴推出的一个企业级的低代码开发平台&#xff0c;它就像是给开发者的一个工具箱&#xff0c;里面装满了各种现成的工具和材料&#xff0c;让搭建应用程序变得像搭积木一样简单。你不需要从零开始&#xff0c;而是可以直接用这些工具和材料去构建你想要的…

基于Spring Boot的家具网站设计与实现

基于Spring Boot的家具网站设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统前台主界面图&#xff0c;用户可进入家具网站可查看…

华为:三层交换机与路由器连通上网实验

三层交换机是一种网络交换机&#xff0c;可以实现基于IP地址的高效数据转发和路由功能&#xff0c;通常用于大型企业、数据中心和校园网络等场景。此外&#xff0c;三层交换机还支持多种路由协议&#xff08;如OSPF、BGP等&#xff09;&#xff0c;以实现更为复杂的网络拓扑结构…

Java_方法引用

方法引用就是把已经有的方法拿过来用&#xff0c;当作函数式接口中抽象方法的方法体。 条件&#xff1a; 1.引用处需要是函数式接口 2.被引用的方法需要已经存在 3.被引用的方法的形参和返回值需要跟抽象方法的形参和返回值保持一致 4.被引用方法的功能需要满足当前的要求 简…

保姆级教程:从 0 到 1 将项目发布到 Maven 中央仓库【2024年5月】

前言 大家好&#xff0c;我叫阿杆&#xff0c;不叫阿轩 最近写了一个参数校验组件&#xff0c;名字叫 spel-validator&#xff0c;是基于 javax.validation 的一个扩展&#xff0c;目的是简化参数校验。 我把项目开源到了GitHub https://github.com/stick-i/spel-validator …

操作系统:线程相关知识

目录 1.生产消费者模型 1.1.概念引入 1.2.基于阻塞队列的生产消费模型 1.3.POSIX信号量 1.3.1.再识信号量 1.3.2.信号量接口的学习 1.4.基于环行队列的生产消费模型 1.5.深刻理解生产消费模型 2.可重入函数与线程安全 1.生产消费者模型 1.1.概念引入 生产者-消费者模型…

08 - 条件判断语句

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 条件判断语句2. 语法说明3. 经验4. 代码 1. 条件判断语句 makefile 中支持条件判断语句 可以根据条件的值来决定 make 的执行可以比较两个不同变量或者变量和常量的值 注&#xff1a;条件判断语句只能用于控制 make 实际执行的…