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)maxc:
                    maxc =count
                    tem=cs
                cs=s[i]
                count=1
           # print(count,cs)
        return maxc,tem

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

你可能感兴趣的:(leetcode(5,最长回文子串))