力扣每日一题:5.最长回文子串 回文场景判断的中心扩散法!

Android面试指南及参考答案 【摘要】LesPark招聘Android开发工程师,要求3年以上经验,负责客户端功能开发与优化。岗位需掌握Java、多线程、网络编程(TCP/UDP/HTTP)及性能调试工具。面试重点考察:1)核心技术如网络协议选择(TCP可靠消息/UDP实时音视频)、内存泄漏分析;2)业务能力如图片懒加载三级缓存设计、启动速度优化案例;3)高阶系统原理如插件化框架设计;4)行为问题应对策略。建议候选人准备并发编程、JVM差异等深度知识,并量化项目优化成果,尤其关注社交应用相关的图片处理、实时通信等场景题。 阅读详情

5.最长回文子串

https://leetcode-cn.com/problems/longest-palindromic-substring/solution/5zui-chang-hui-wen-zi-chuan-hui-wen-chan-z3yj/

难度:中等

题目:

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

示例:

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

示例 2:
输入:s = "cbbd"
输出:"bb"

示例 3:
输入:s = "a"
输出:"a"

示例 4:
输入:s = "ac"
输出:"a"

分析

这道题看似麻烦,但仔细考虑回文子串只有两种情况:

  1. 奇数回文,即 aba
  2. 偶数回文,即 abba

那么我们只需要循环字符串的每一个index,当满足一下条件时,从中心向两边扩展:

  1. left >= 0
  2. right < len(s)
  3. s[left] == s[right]
    对于第三个条件,存在奇数回文和偶数回文的判断:
  • 奇数回文时,我们初始left == right
  • 偶数回文时,我们初始化right == left + 1

根据这两种情况进行遍历,最终即可获取结果。具体代码如下。

解题:

class Solution:
    def longestPalindrome(self, s):
        ln = len(s)
        # s为空或者s为自己本身的情况
        if ln < 2:
            return s
        ret = ''

        def finder(left, right):
            nonlocal ret
            while left >= 0 and right < ln and s[left] == s[right]:
                left -= 1
                right += 1
            ret = s[left + 1:right] if right - left - 1 > len(ret) else ret

        for i in range(ln ):
            finder(i, i)
            finder(i, i + 1)
        return ret

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试   人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1.... 阅读详情

相关推荐

CiteSpace关键词聚类图谱含义详细解析

CiteSpace关键词聚类图谱含义详细解析 回顾上一次推文:CiteSpace关键词共现图谱含义详细解析 其中有一句: 当你人工已经可以很容易的进行归纳后,就不需要再利用CiteSpace聚类功能啦。 我们来看一下上次推文做出来的关键词共现图谱: 人工不好归纳!那怎么聚类呢? 此时便可使用CiteSpace的聚类功能啦! 如下所示:我们可以清晰地看到上边的关键词共现网络聚成了一个个不规则区域...

qq_39974284的博客 6万+

最长回文子串-中心扩散法

描述 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 示例 3: **输入:**s = “a” 输出:“a” 分析 本题采用的方法是 中心扩散法。 从每一个位置出发,向两边扩散即可。 首先往左寻找与当期位置相同的字符,直到遇到不相等为止。 然后往右寻找与当期位置相同的字符,直到遇到不相等为止。 最后左右双向扩散,直到左和右不相等。 每个位置向两边扩散

Strange_boy的博客 826

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

Python最长回文子串

# 1.暴力解法(Brute Method) """ 暴力求解是最容易想到的,要截取字符串的所有子串,然后再判断这些子串中哪些是回文的,最后返回回文子串中最长的即可。 这里我们可以使用两个变量,一个记录最长回文子串开始的位置,一个记录最长回文子串的长度,最后再截取。 """ class Solution: def longestPalindrome(self, s): if (len(s) < 2): return s start .

weixin_42698464的博客 6751

022、Conv-BN-SiLU 基础卷积块:构造函数参数计算,前向传播的 PyTorch 逐行实现

本文详细解析了Conv-BN-SiLU卷积块的实现细节与注意事项。作者从调试经历出发,指出bias参数冗余会导致数值不稳定,强调卷积层应设置bias=False。文章对比了SiLU与ReLU的特性差异,逐行分析了构造函数参数计算(包括自动填充、分组卷积等)和前向传播过程,特别讲解了BN层与SiLU激活的数值特性。最后分享了三个实践中的常见问题:BN的momentum设置、SiLU输出范围的影响,以及分组卷积的通道对齐要求,并提供了卷积与BN融合的推理优化技巧。全文聚焦实际工程实现中的关键细节,具有较强实操指

ai技术增长的博客 218

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案。

1291

中心扩散法---最长回文子串

什么是中心扩散法? 中心扩散法,顾名思义就是以某一个位置为中心,向周围扩散,直到满足条件或到达边界。 Leetcode 5.最长回文子串 题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1:输入: "babad",输出: "bab",注意: "aba" 也是一个有效答案。 示例 2:输入: "cbbd",输出: "bb" 解题思路:遍历s,以每个char以及两个char中点为中心,计算以此点为中心的最长回文串; 例如: 字符串abc.

qq_30905243的博客 499

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

中心扩散法解决最长回文子串问题(LeetCode 5)

中心扩散法解决回文子串

m0_74837192的博客 334

在 SAP 中,Primary Cost Element(初级成本要素)与Secondary Cost Element(次级成本要素)的核心区别、作用及业务含义可归纳如下

摘要:SAP中初级成本要素与次级成本要素的核心区别在于:初级要素必须关联FI模块的损益科目,直接影响财务报表,用于记录外部成本(如电费、薪酬);次级要素仅存在于CO模块,用于内部成本分配(如分摊、作业分配),不影响外部报表。初级要素是"外部成本入口",次级要素是"内部成本搬运工",二者共同实现成本的多维度追踪与管理。

金牌架构师 762

3、无限维系统理论中的算子与半群:概念、定理及应用

本博文深入探讨了无限维系统理论中的两个核心概念:里茨谱算子与卢默-菲利普斯定理。文章首先介绍了里茨基的定义与性质,分析了谱、预解集及特征值在无限维系统中的特性,并详细阐述了里茨谱算子的条件及其生成C0-半群的能力,结合阻尼欧拉-伯努利梁模型展示了其应用。随后,文章介绍了卢默-菲利普斯定理及其推论,通过多个偏微分方程实例(如一阶方程、柔性梁、波动方程和扩散问题)说明如何利用该定理判断算子是否生成压缩半群。此外,还强调了状态空间选择和边界条件对系统适定性的重要影响,并总结了相关问题的解决步骤与方法。

flink9streamer的博客 148

求最长回文子串中心扩散法、Manacher、动态规划

关于求解最长回文子串问题前言一、中心扩散法?二、动态规划法三、Manacher求回文子串总结 前言 求一个字符串中的最长回文子串问题,有很多方法。我弄懂了三种,在这里和大家分享 一、中心扩散法? 中心扩散法是一个解决回文子串非常好用的方法。该方法的思想是将字符串从某个位置向左右扩散,只要左右对称位置的字符相同就可以一直扩散,知道不同停止,从左至右,扩散的下标之差就是该位置能得到的最大回文子串。 举个例子: 如图所示,称这个字符串为arr,从下标为3的6字符向左右扩散,arr[2]==arr[4],ar

qq_39320046的博客 662

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5209

【每日算法】LeetCode 5. 最长回文子串(动态规划)

前端开发者学习算法有助于从"页面构建者"进阶为"复杂系统设计者",提升问题解决能力。LeetCode第5题"最长回文子串"考察字符串处理能力,其最优解为中心扩散法,时间复杂度O(n²),空间复杂度O(1)。该算法利用回文串的对称性,遍历每个可能的中心并向两侧扩展,比动态规划法更节省空间。掌握此类算法能提升前端开发中字符串处理、性能优化等核心技能,是技术进阶的关键。

LYFlied的博客 1046

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

最长回文串之中心扩散法

最长回文串之中心扩散法 LeetCode上第五题最长回文串的中心扩散Python3解法

github_35735591的博客 693

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LeetCode.5 最长回文子串(python解法)

目录题目solution_1solution_2参考资料 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" solution_1 思路:中心扩散法。遍历每一个元素,以这个元素为中心,利用“回文串”中心对...

weixin_41638083的博客 678

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Leetcode5 -- 最长回文子串 -- Python -- 中心扩散法

@Leetcode5 – 最长回文子串 – 中心扩散法 最长回文子串 题目 题目分析 首先理解什么是回文串,就是正着读和反着读都一样的字符串 看了题解一共有三种方法,暴力法,中心扩散法,动态规划法,这里着重介绍中心扩散法。 中心扩散法的主要解题思路: (1)遍历字符串的每一个字符,每一个字符都作为一次中心,向两边扩散,如果两边一样,就继续扩散,不一样则停止 (2)但是会分两种情况,就是回文串是...

Qichao的博客 447

5.最长回文子串之中心扩散法-python

题目 给定字符串s,请找到字符串s中最长的回文子串 如: s= “badadb” 的回文子串str 为“ada”. s = "w" ,str = "w", s = "qe", str = "q"。 解题思路 首先我们要理解,何为最长回文子串?通俗点讲,回文子串就是字符串关于中点字符对称,左右两边长的一样。将字符串倒序后仍是原来的字符串。说到这里我们不得不提一下苏轼的一首有名回文诗。 题金山寺 ...

lishuaigell的博客 678

最长回文字符串中心扩散法--python

最长回文字符串中心扩散法 给一个字符串,返回他的最长回文子字符串 例: ‘abac’ ‘aba’ 中心扩散: 选定中心, ‘b’, 比较左边和右边, 如果左边的index大于0,右边的index小于字符串长度,并且左边字符等于右边字符,则left -=1, right+=1, 即满足三个条件左右扩大一次。遍历字符串,每个字符都做一次中心,选出最长的字符。 但是有一个问题,如果碰到’abbac’,这种情况, 那么选定中心b, 发现左边是b,右边是a,不符合条件,则不能扩张,但是实际上他的中心应该在两个b的

kasiko的博客 487

【LeetCode】5.最长回文子串(中心扩散法,动态规划,超详细图文,java实现)

分析 说明: 以下解法中「暴力算法」是基础,「动态规划」必须掌握,「中心扩散」方法要会写; 「Manacher 算法」仅用于扩宽视野,绝大多数的算法面试中,面试官都不会要求写这个方法(除非面试者是竞赛选手)。 方法一:暴力匹配 (Brute Force) 根据回文子串的定义,枚举所有长度大于等于 22 的子串,依次判断它们是否是回文; 在具体实现时,可以只针对大于“当前得到的最长回文子串长度”的子串进行“回文验证”; 在记录最长回文子串的时候,可以只记录“当前子串的起始位置”和“子串长度”,不必做截取

Viper的程序员修炼手册 1623

LeetCode005:最长回文子串 中心扩散法

给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 思路:使用中心扩散法,「中心扩散法」的基本思想是:遍历每一个下标,以这个下标为中心,利用「回文串」中心对称的特点,往两边扩散,看最多能扩散多远。 回文串在长度为奇数和偶数的时候,「回文中心」的形态不一样: 奇数回文串的「中心」是一个具体的字符,例如:回文串 “aba” 的中心是字符 “b”; 偶数回文串的「中心」是位于中间的两个字符的「空隙」,例如:

46426906的博客 554

中心扩散法解最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 示例 3: 输入:s = "a" 输出:"a" 示例 4: 输入:s = "ac" 输出:"a" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成 来源:力扣(LeetCode) 链接:https://leetcode-cn.co

浅夏沫若的博客 270

最长回文子串(中心扩散法)

给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。 所谓回文串,指左右对称的字符串。 所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串 (注意:记得加上while处理多个测试用例) 输入描述: 输入一个仅包含小写字母的字符串 输出描述: 返回最长回文子串的长度 示例1 输入: cdabbacc 输出: 4 说明: abba为最长的回文子串 import java.util.Scanner; public class Main{ p

txwhmeng的博客 303

python----最长回文子串的暴力解法以及动态规划解法

第一种:暴力解法,双重循环,o(n^2) def longestPalindString(ss): palindString="" max_len=0 if len(ss)==1: return ss for i in range(len(ss)): for j in range(i+1,len(ss)): i...

haoshan4783的博客 2660

力扣----经典题(python实现)

经典题一:两数之和:二:三数之和:三:两数相加:四: 买股票的最佳时机: 一:两数之和: 二:三数之和: 1:首先我们要对数组进行排序, 排序的原因是因为不允许出现重复的。 2:第一层循环,我们可以循环遍历数组,枚举a,而且我们要判断当前枚举的和上次枚举的是否值是相同的,如果相同的,则直接跳过。 3:第二层中,我们可以计算出,剩余两个相加需要的和。我们可以让第三个指针,指向末尾,然后循环遍历第二个指针, 4:第三层中,每次第二个指针到达一个位置,我们计算这两个指针的相加和是多少,如果大于需要的和,说明加多

一夜奈何梁山 4135

最长回文子串(中间扩展法)

上一篇博文写了用三重循环暴力法求最长回文子串,

剑尚未佩妥 861
上一篇: 力扣每日一题:用两个栈实现队列 详细的思路介绍与逻辑整理!
下一篇: 力扣每日一题:1881.插入后的最大值 合并考虑正负场景,避免代码重复
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值