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

示例 1:

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

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

这道题我采用的是中心扩散的方法,分别判断 aca, aabbaa 两种模式,因此进行了两次遍历,时间上不太理想只超越了30%,但是空间上超越了99%,也算是有利有弊。

官网题解提到了 Manacher 算法 暂时还没有了解,后面学习一下该方法,改进一下。

题解:

class Solution:
    def longestPalindrome(self, s: str) -> str:
        result = ''
        slen = len(s)
        if slen == 0:
            return ''
        for i in range(slen):
            li = i-1
            ri = i+1
            cur = s[i]
            for j in range(min(i, slen-i-1)):
                if li < 0 or ri >= slen:
                    break
                if s[ri] == s[li]:
                    cur = s[li] + cur + s[ri]
                    li -= 1
                    ri += 1
                else:
                    break
            if len(cur) > len(result):
                result = cur

            li = i-1
            ri = i
            cur = ''
            for j in range(min(i, slen-i)):
                if li < 0 or ri >= slen:
                    break
                if s[ri] == s[li]:
                    cur = s[li] + cur + s[ri]
                    li -= 1
                    ri += 1
                else:
                    break
            if len(cur) > len(result):
                result = cur

        return result
12-18 05:05