leetcode(5,最长回文子串)

算法题也刷了很多,正儿八经去仔细思考回文的题目,这还是第一道。

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

自己思考的比较简单,最初想的就是暴力解题法,对回文子串的长度判断只做了一个简单的判定,没有更多详细的思考(函数1)。后来发现运行超时,有一个测试用例始终过不了,是一个重复子串的考虑,就又写了一个函数来专门做这个,附上代码(4992ms)

class Solution:
    def longestPalindrome(self, s):
        if len(s)<2:
            return s
        b = list(s)
        lenmax,maxstr = self.getLreply(s)
        for i in s:
            index = b.index(i)
            c=''.join(b)
            #print(c)
            for j in range(lenmax,len(c)):
                d=c[:j+1]
                #print(d,d[::-1])
                if d==d[::-1]:
                    if len(maxstr)<len(d):
                        maxstr=d
                        lenmax=len(maxstr)
            b.pop(index)       
        return maxstr

    def getLreply(self,s):
        count=1
        maxc=0
        cs=s[0]
        tem=''
        for i in range(1,len(s)):
            if s[i]==s[i-1]:
                count+=1
                cs+=s[i]
            else:
                if count>maxc:
                    maxc =count
                    tem=cs
                cs=s[i]
                count=1
           # print(count,cs)
        return maxc,tem

自己的想法比较简单,是通过暴力解题的方法,只是依靠maxlen对后面回文子串的长度比对做了一些限制,整体时间复杂度O(n2),空间复杂度O(1)。看到官网题解有动态规划和马拉车算法进行的优化,貌似马拉车算法优化效率很高,明天准备再仔细研究一下,现在有点晚了。明天继续更新吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xushikou1514

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值