Python最长回文子串

5.最长回文子串 python 中最长的回文子串,可以使用中心扩展法。这种方法的时间复杂度为 (O(n^2)),空间复杂度为 (O(1)),适合解决这个问题。通过这种方法,我们可以在 (O(n^2)) 的时间复杂度内找到字符串。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”s 仅由数字和英文字母组成。 阅读详情

Python最长回文子串

变体

  1. 返回str中最长回文子串的长度
  2. 给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加字符,请返回在str后面添加的最短字符串

要求

解决原问题和变体问题的时间复杂度为O(N)

思路

写的很好的博客:
Manacher’s Algorithm 马拉车算法
全套解法

个人见解

看了上面的博客,第一个Manacher‘s算法总感觉有点瑕疵,关键代码部分阅读起来有点吃力,也许是我太菜了。下面我将给出一个讲解非常好的资料,《来自于程序员代码面试指南:IT名企算法与数据结构题目最优解》

解答

感觉文中有些笔误的地方,用蓝色线画出了一下,添加了我的理解,如果是我理解错了,请指出万分感谢。
万事开头难,如果是第一次了解这个算法的话,多花点时间看一看。
我花了半天好好的研究了一下,以后再复习会更快。
建议:

  1. 当你看了半天看的有点糊涂的时候,就告诉自己,博主这样的菜鸡儿,都能你也可以。
  2. 在当你觉得已经了解大概思路,但是发现这篇文章还有这么长的时候,你就要告诉自己,我都已经了解了过程了,我到底要看看你剩下的篇幅啰嗦啥呢!!!坚持读下去你会受益匪浅哦。















对于进阶问题2,上述讲的就是进阶问题1. 很显然本题和进阶问题基本一致,有index,有半径能唯一确定这个最长回文。

Python 实现

class Solution:
    def manacherString(self,s):
        charArr = list(s)
        res = []
        index = 0
        for i in range(0, len(charArr) * 2 + 1):
            if (i & 1) == 0:
                res.append("#")
            else:
                res.append(charArr[index])
                index += 1
        return res
   
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        # if s is None or len(s) == 0:
        #     return None
        charArr = self.manacherString(s)
        pArr = []
        index = -1
        pR = -1
        max_value =  -11111
        # maxContainsEnd = -1
        for i in range(0,len(charArr)):
            if pR > i:
                pArr.append(min(pArr[2*index -i],pR-i))
            else:
                pArr.append(1)

            while i + pArr[i] < len(charArr) and i - pArr[i] > -1:
                if charArr[i + pArr[i]] == charArr[i - pArr[i]]:
                    pArr[i] += 1
                else:
                    break

            if i + pArr[i] > pR:
                pR = i + pArr[i]
                index = i
            max_value = max(max_value, pArr[i])
   
        result1 = pArr.index(max_value)
        result2 = charArr[result1-max_value+1:result1+ max_value]
        for i in range(0,len(result2),2):
            result2.remove('#')
        result2 = ''.join(result2)
        return result2
    

#leetcode Test 最快的答案
class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s) < 2 or s == s[::-1]:
            return s
        
        max_len = 1
        start = 0
        for i in range(1,len(s)):
            even = s[i - max_len : i + 1]
            odd = s[i - max_len - 1 : i + 1]
            if i - max_len - 1 >= 0 and odd == odd[::-1]:
                start = i - max_len - 1
                max_len += 2
                continue
            if i - max_len >= 0 and even == even[::-1]:
                start = i - max_len
                max_len +=  1
        return s[start : start + max_len]

动态规划求解


上面的原文地址:

另外的变体题目

回文子序列问题
https://www.cnblogs.com/AndyJee/p/4465696.html

Python实现寻找最长回文子串算法 在计算机领域,我们经常需要寻找最长的回文子串,用于解决各种问题,比如字符串匹配等。本文将基于Python语言,介绍如何实现寻找最长回文子串的算法,并给出完整的源代码。以上算法的时间复杂度为O(N²),N为字符串s的长度。虽然时间复杂度比较高,但是空间复杂度不需要额外开辟空间,是一个相对简单而且实用的寻找最长回文子串的算法。print(longest_palindrome(“babad”)) # 输出"bab"print(longest_palindrome(“cbbd”)) # 输出"bb" 阅读详情

相关推荐

Android Qcom USB Driver学习(十三)

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) Android Qcom USB Driver学习(八) Android Qcom USB Driver学习(九)deals with the USB Power Delivery resources used by one or more ports on the basis of the local device policy the basis of the local device policy.opera

Android驱动开发 2611

LeetCode-----Day3

题目: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是(负数也不是)。 解题思路: 首先判断整数正负,如果是正数则继续判断 再把正数进行倒序,判断是否与原序相等(求反转数,具体思路在Day2中) def Solution(x:int): inverse_x = 0 if x > 0 : for i in range(30):

huayiranza的博客 466

AWD线下攻防赛总结

在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。

XuJL89的博客 630

5.最长回文子串(python3)(含注释)

5.最长回文子串

m0_63505246的博客 922

Xilinx UltraScale+系列FPGA实现USB3.0 DEV 设备 部分原理图+代码分享

Zynq UltraScale+ MPSoC 系列是 Xilinx 新一代 Zynq 平台。在 FPGA 里有完整的 ARM 处理(PS),包含了四核或双核 Cortex-A53 处理器 ,处理器子系统中有DDR内存控制器等大量的外设,在FPGA中完全独立于可编程逻辑单元(PL)如果暂时没有用到PL部分,PS也能单独工作,相当于可以当成一个ARM来用了(以前的不行)。 ARM也包含USB3.0控制器,这是实现USB3.0DEV的关键,根据官方手册(ug1085)描述,USB主(Host)从(Device)

Pierre 1万+

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模,才能一路突破围追堵截,进一步促进国产大模型产业生态繁荣。集群还提供了完善高效的软件栈工具,集成多种主流的深度学习编程框架,通过测试验证,确保了对行业领先人工智能模型的高效支持,做到开箱即用,用户可快速投入模型的开发和部署,加速了其在人工智能领域的布局和发展。方面取得了显著成效。

Ucloud_TShare的博客 1471

Python 第二节 第十二课

[toc] 字符串驻留机制和字符串比较 字符串驻留: 仅保存一份相同且不可变字符串的方法, 不同的值被存放在字符串驻留池中. Python 支持字符串驻留机制, 对于符合标识符规则的字符串 ( 仅包含下划线 (_), 字母和数字 ) 会启用字符串驻留机制. ...

我是小白呀的博客 981

【STM32Cube HAL】输入捕获(六)——PWM测量

实验内容:使用通用定时器输入捕获测量信号的脉宽(检测按键按下的时间)。 一、原理图 二、 CubeMX配置 Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。 Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。 Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这...

HAHAHA 1万+

LeeCode-最长回文子串(python)三种解法

给你一个字符串 s,找到 s 中最长的回文子串。提示: DP 1、dp[i][j]数组:表示区间范围[i,j] (左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。 2、递推:dp[i][j] 是回文,那么只有当s[i] == s[j] 时,dp[i+1][j-1] = true(是回文串)。当对于长度为 1 的子串,显然是个回文串;对于长度为 2 的子串,只要两个字母相同,就是一个回文串。 3、dp数组初始化:全为False 4、遍历顺序:     a、以矩阵来看,

lingxw的博客 1154

CQE和SQE 以及 PQA和DQA的区别

‌:PQA聚焦产品全生命周期流程管理,DQA专注于设计阶段的质量控制。

a1809032425的博客 1900

【WLAN】【测试】WPS测试方法小结

手机 一般稍微老的手机会支持,新手机反而不支持。 比如小米6(系统版本新的话不支持)在设置——高级设置——WPS连接。 笔记本 有些笔记本(如Surface Laptop 3)天生支持WPS,比如在连接某SSID的时候,会有“也可以通过按路由器上的按钮连接”这样的字样,出来后按AP的WPS按键即可以进行连接。 Qss软件 AP mesh组网中,Controller和Agent之间通过WIFI组网,可使用WPS的方式进行连接。可利用这点用Agent来测试AP的WPS功能。 ...

一介草民,只为生活。 1万+

最长回文子串---python实现

1.找出串中的最长回文子串 思路:借鉴递归的思想,将字符串分为s[0:i-1],s[i],依次求出以i为末尾的最长字串,如果发现包含i的字串是回文串,将其长度与i比较,如果大于则更新,小于则丢弃,将i加一,循环以上操作,知道s[0:i]=s. #判断是否是回文数 def huiwenshu(s): head=0 end=len(s)-1 while(head<end): if s[head]==s[end]: head+=1.

qq_38669789的博客 319

JavaScript实现边缘检测Canny(附完整源码)

JavaScript实现边缘检测Canny(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 705

LeetCode Python - 5.最长回文子串

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”

xuxu96 664

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

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

最长回文子串python暴力_python实现对求解最长回文子串的动态规划算法

基于python实现对求解最长回文子串的动态规划算法,具体内容如下1、题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"2、求解对于暴力求解在这里就不再骜述了,着重介绍如何利用动态规划算法进行求解。关于动态规划的含义及用法,请参...

weixin_39628343的博客 86

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

leetcode 5. 最长回文子串 Python

分类题目解题思路动态规划Python实现 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 输入: "cbbd" 输出: "bb" 解题思路 动态规划 定义“状态” 找到“状态转移方程” 如果子串只有一个则该子串就是回文子串 如果是2个以上,检查当前...

Languedoc_Roussillon的博客 246

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

最长回文子串python_python实现对求解最长回文子串的动态规划算法

基于Python实现对求解最长回文子串的动态规划算法,具体内容如下1、题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"2、求解对于暴力求解在这里就不再骜述了,着重介绍如何利用动态规划算法进行求解。关于动态规划的含义及用法,请参...

weixin_39851872的博客 187

最长回文子串python暴力_LeetCode5最长回文子串-Python

给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"class Solution:def longestPalindrome(self, s):""":type s: str:rtype: str"""#最长回文串必然在最长公共子...

weixin_39630744的博客 98

5.最长回文子串 && 647.回文子串 (python)

题目描述 5.最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 647.回文子串 给你.

cqjnovo的博客 679

python最长回文子串leetcode_Leetcode最长回文子串问题

LeetCode第五题,最长回文子串问题,其中Python下面有一种解法,原理有点看不懂,英文描述如下:Basic thought is simple. when you increase s by 1 character, you could only increase maxPalindromeLen by 1 or 2, and that new maxPalindrome includes...

weixin_39946657的博客 114

4. Leetcode-最长回文子串(python)

给你一个字符串s,找到s中最长的 回文 子串。"bab""aba" 同样是符合题意的答案。

m0_74930453的博客 415

leetcode--最长回文子串--python

文章目录题目题目详情示例解题思路思路代码运行结果最佳方案 题目 题目详情 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 输入: "cbbd" 输出: "bb" 解题思路 思路 首先说一下我的伪代码吧 1. 遍历字符串 2. 比较遍历的两个值是否相等(while循...

谜月的博客 638

最长回文子串长度python

2.如果第i个和第j个字符相同,则有可能A[i:j+1]是回文子串,进一步进行判断,如果是回文子串,则表示该子串是以第i的字符开始的最长的回文子串,则i+1,j重置为len(A)-1。如果第i个和第j个字符不相同或者相同但A[i:j+1]不是回文子串,则j-1、i不变。1.双指针:i从左向右遍历字符串,对于每一个字符,j从右向左遍历i右边的字符。3.过程中保证i向右,j向左,i < j。获取最长回文子串的长度。

qq_36292545的博客 360

最长回文子串(Python,LeetCode)

LeetCode题目《最长回文子串》的Python解决方案。

TCatTime的博客 1233

LeetCode最长回文子串解题思路Python JavaScript

LeetCode解题记录

kllwlick的博客 448
上一篇: Python寻找两个有序数组的中位数
下一篇: 2-3-4树(转红黑树),B-树,B+树分析
GhostintheCode
博客等级 码龄8年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值