力扣回文字符串(python语言)

力扣刷题系列:最长回文子串

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

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

示例 2:

输入:s = “cbbd”
输出:“bb”

这个题还是有一定难度的。下面的第一段代码是理论上可行的,但是运算量太大,直接超出运算时间。这段代码的逻辑大致如下:首先用i对字符串进行遍历,每当i走到一个位置,用j遍历剩下的字符串,并判断是否有回文子串,这样的话需要走n!次循环,运算量巨大。

    def longestPalindrome(self, s: str) -> str:
        yy=[]
        flag=0
        zz=[]
        if len(s)>1:
            for i in range(len(s)):
                m=''
                h=s[i::]
                z=0
                k=True
                for j in range(len(h)):
                    m=m+h[j]
                    if m==m[::-1] and len(m)>=2:
                        yy.append(m)
                        zz.append(len(m))
            
        if len(yy)>=1:
            for i in range(len(yy)):
                if len(yy[i])==max(zz):
                    flag=i
            return yy[flag]
        else:
            return s[0]

哈哈,官方最后给的一个测试案例是是这样的:s=“abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa”
好家伙直接给我代码整不会了,报错如下:
在这里插入图片描述
于是就只好修改代码,看官方的解答对于我这个门外汉来说实在是想不到,于是就想着修改一下自己的代码,代码逻辑:首先还是用i对字符串进行遍历,不过这里新增加一个max(zz),zz里面存储的是回文串的长度,题目让我们找的是最长的回文字符串,所以在后续找到的比前面小的回文字符串就不需要再放入yy,同时j对剩下的字符串遍历的起始长度为max(zz)。举例:字符串s=‘abbcccbbbcaaccbababcbcabca’,当我第一次找到回文字符串‘bb’时,接下来就需要针对长度至少为3的字符串判断其是否为回文字符串,同样我找到第二个回文串‘bbcccbb’,那我第三次要找的回文串的起始长度至少为7,根据这个逻辑,修改后代码如下,

        yy=[]
        zz=[0]
        if len(s)>1:
            for i in range(len(s)):
                m=s[i:i+max(zz)]
                h=s[i::]
                z=0
                k=True
                for j in range(max(zz),len(h)):
                    m=m+h[j]
                    if m==m[::-1] and len(m)>=2:
                        yy.append(m)
                        zz.append(len(m))
            
        if len(yy)>=1:
            return yy[-1]
        else:
            return s[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值