LeetCode5:最长回文子串、LeetCode647:回文子串

文章目录

    • LeetCode647:回文子串
      • 题目
      • 示例
      • 提示
      • 解题思路
      • 解题代码
      • 复杂度
    • LeetCode5:最长回文子串
      • 题目
      • 示例
      • 提示
      • 解题思路
      • 解题代码
      • 复杂度
    • 总结

LeetCode647:回文子串

题目

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例

输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"输入:s = "aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示

  • 1 <= s.length <= 1000
  • s 由小写英文字母组成

解题思路

回文字符串的概念已经明白,回文字符串的长度分为两种(奇数偶数)。

  • 如果字符串奇数的话就是不需要考虑中间的字符,从中间向两边扩展,若左边等于右边,则为回文字符,直到左边字符不等于右边字符或到达边界停止,比如 aba。
  • 如果字符串长度偶数的话取最中间的两值向两边扩展,若左边等于右边,则为回文字符,直到左边字符不等于右边字符或到达边界停止,比如 abba。
    所以我们需要遍历一遍字符串,对当前字符串下标有两种选择,一种当成字符串长度为奇数去向两边扩展,一种是当成长度为偶数去向两边扩展。

解题代码

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

复杂度

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

LeetCode5:最长回文子串

题目

给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例

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

提示

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

解题思路

有了上一道题的基础,这道题写的就游刃有余了,一开始想着,可以讲所有回文字符串存放到一个数组中,但是截取字符串时间复杂度为O(N),可能会超时,就用两个数据left、right代替回文字符串的左右端,如果新的回文子串长度大于right - left的长度,更新left、right。

解题代码

class Solution {int left = 0;int right = 0;
public:string longestPalindrome(string s) {for(int i = 0 ;i < s.size();i++){excend(s,i,i,s.size());excend(s,i,i+1,s.size());}return s.substr(left,right-left+1);}void excend(string s, int i,int j,int n){int cnt = 0;while(i >=0 && j < n && s[i] == s[j]){if(j - i > right - left){right = j;left = i;}i--;j++;}}
};

复杂度

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

总结

做了第一道题回文子串,再写最长回文子串更简单,这种题还有一种dp写法,在这里就不描述了。

更多资料点击 GitHub 欢迎各位读者去Star

⭐学术交流群Q 754410389 持续更新中~~~

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

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

相关文章

Module not found: Error: Can‘t resolve ‘vue-pdf‘ in ‘xxx‘

使用命令npm run serve时vue项目报错&#xff1a; Module not found: Error: Cant resolve vue-pdf in xxx 解决方案&#xff1a; 运行命令&#xff1a; npm install vue-pdf --save --legacy-peer-deps 即可解决。 再次顺利执行npm run serve

webrtc在js里的实现

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一项开放的浏览器技术&#xff0c;它允许浏览器之间建立点对点&#xff08;peer-to-peer&#xff09;连接&#xff0c;实现音频、视频、文件的传输和通信。它的实现一般需要使用JavaScript语言。 在JavaScript中&…

Linux系统USB摄像头测试程序(四)_视频旋转及缩放

下面的程序实现了视频的旋转及缩放&#xff0c;窗口中点击鼠标左键视频向左旋转&#xff0c;点击鼠标右键视频向右旋转并且视频缩小了二分之一。程序中首先把yvyv422转换成了RGB24&#xff0c;然后利用opencv进行了旋转和缩放&#xff0c;其后用sdl2进行了渲染。使用了ffmpeg、…

问道管理:市盈率市净率两个指标含义怎么算?

市盈率和市净率是出资领域常用的两个目标&#xff0c;用于评价公司的估值和出资的报答状况。本文将从多个视点剖析这两个目标的含义和计算方法&#xff0c;帮助读者更好地了解和运用它们。首先&#xff0c;市盈率&#xff08;P/E ratio&#xff09;是用来衡量公司股票价格与每股…

程序运行的马甲:进程(1/7)

一个可执行文件被加载到内存中运行时&#xff0c;它在内存空间的分布如图所示&#xff1a; 在内存中有专门的堆栈空间&#xff0c;函数的局部变量是保存在栈中的&#xff0c;使用 malloc 申请的动态内存是在堆空间中分配的&#xff0c;它们是程序运行时比较特殊的两块内存区域&…

从上帝视角俯瞰vue2路由(简单易懂)

文章目录 路由原理&#xff08;hash&#xff09;路由安装和使用&#xff08;vue2&#xff09;路由跳转路由的传参和取值嵌套路由路由守卫完整代码 路由原理&#xff08;hash&#xff09; 单页应用的路由模式有两种 哈希模式&#xff08;利用hashchange 事件监听 url的hash 的…

php图片批量压缩并同时保持清晰度

php图片压缩可以通过GD库来实现。以下是一个使用GD库进行图片压缩的示例代码&#xff1a; // 原始图片路径 $sourceImage path/to/source/image.jpg; // 压缩后保存的路径及文件名 $compressedImage path/to/compressed/image.jpg; // 压缩后的图片质量&#xff08;1-100&…

2.Vue报错Cannot read properties of undefined (reading ‘then‘)

1.出现报错 Cannot read properties of undefined (reading ‘then’)&#xff0c; 代码为 uploadFile(e.target.files[0]).then((res) > {alert(JSON.stringify(res));});2.原因 是因为uploadFile方法没有返回值&#xff0c;于是我又检查了一遍代码&#xff0c;发现我的r…

数据挖掘-关联规则学习-Apriori算法原理

数据挖掘-关联规则学习-Apriori算法原理 引言&#xff1a;一、关联分析是什么&#xff1f;二、基本概念1. 项2. 项集3. 支持度4. 置信度5. 提升度6. 频繁项集 三、关联分析过程四、Apriori算法原理五、程序实现 引言&#xff1a; 比如你女朋友&#xff0c;低头玩手指沉默&…

基于深度神经网络的分类--实现与方法说明

1、分类系统的设计 采用神经网络进行分类需要考虑以下几个步骤&#xff1a; 数据预处理&#xff1a; 将数据特征参数和目标数据整理成合适的输入和输出形式&#xff0c;可以使用过去一段时间的数据作为特征&#xff0c;然后将未来的数据作为输出标签&#xff0c;进行分类问题的…

c++ future与promise

C11 标准中 头文件中包含了以下几个类和函数&#xff1a; Providers 类&#xff1a;std::promise, std::package_taskFutures 类&#xff1a;std::future, shared_future.Providers 函数&#xff1a;std::async()其他类型&#xff1a;std::future_error, std::future_errc, st…

sleep () 和 wait () 有什么区别?

sleep () 方法 sleep () 方法是Thread类的静态方法&#xff0c;可以通过Thread.sleep()来调用。 它是线程的一个静态方法&#xff0c;用于让当前线程休眠一段指定的时间。 sleep () 不会释放线程持有的锁&#xff0c;因此其他线程无法获得锁资源&#xff0c;可能导致同步问题…

13.4 目标检测锚框标注 非极大值抑制

锚框的形状计算公式 假设原图的高为H,宽为W 锚框形状详细公式推导 以每个像素为中心生成不同形状的锚框 # s是缩放比&#xff0c;ratio是宽高比 def multibox_prior(data, sizes, ratios):"""生成以每个像素为中心具有不同形状的锚框"""in_he…

后端Windows软件环境安装配置大全[JDK、Redis、RedisDesktopManager、Mysql、navicat、VMWare、finalshell、MongoDB...持续更新中]

文章目录 前言1. 安装 JDK2. 安装 Redis3. 安装 RedisDesktopManager&#xff08;Redis可视化工具&#xff09;4. 安装 Mysql5. 安装 navicat (Mysql可视化工具)6. 安装 VMWare7. 安装 finalshell (VMWare可视化工具)8. 安装 MongodDB9. 安装 maven 总结 前言 为了巩固所学的知…

vue 主组件把日期选择器给子组件props传obj值, 与子组件监听 watch对象或对象属性

1 主组件 1.1 :passObj 这种 非v-model ; change"DateChange"触发事件 <template> <div class"date-picker-panel"><el-date-picker v-model"value2" type"datetimerange" :picker-options"pickerOptions"…

Web安全测试(三):SQL注入漏洞

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

WSL2 window上高效运行Linux

1 WSL及优势 1.1 WSL简介 WSL&#xff08;Windows Subsystem for Linux&#xff09;是Windows操作系统中的一个功能&#xff0c;它允许用户在Windows环境下运行Linux应用程序。WSL提供了一个与Linux内核兼容的系统调用转发层&#xff0c;使得Linux二进制文件可以在Windows上直…

基于风险的漏洞管理

基于风险的漏洞管理涉及对即将被利用的漏洞的分类响应&#xff0c;如果被利用&#xff0c;可能会导致严重后果。本文详细介绍了确定漏洞优先级时要考虑的关键风险因素&#xff0c;以及确保基于风险的漏洞管理成功的其他注意事项。 什么是基于风险的漏洞管理对基于风险的漏洞管…

vue中html引入使用<%= BASE_URL %>变量

首先使用src相对路径引入 注意&#xff1a; js 文件放在public文件下 不要放在assets静态资源文件下 否则 可能会报错 GET http://192.168.0.113:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 正确使用如下&#xff1a;eg // html中引…

(线特征)opencv+opencv contribute 配置

写一篇博客&#xff0c;记录开始线特征slam的历程。 在配置环境的时候&#xff0c;可以发现大多数都是用到了opencv3.4.16和其contribute版本&#xff0c;这里进行一个相关操作的教学。配置环境是在Ubuntu下面进行的&#xff0c;建议使用Ubuntu18来进行线特征的配置以及代码的…