Leetcode 5.最长回文子串

Time: 20190906
Type: Medium

题目描述

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

示例 1:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

还是一样的思路,定义f[i][j]表示以i开头,以j结尾的字符串是否为回文。

注意f[i][j]的更新与f[i+1][j-1]相关,所以i从大往小遍历,j从小往大遍历,且注意ji大,从i开始,否则复杂度会变高。

代码

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        f = [[False] * n for _ in range(n)]
        # f[i][j]表示以i开头,j结尾的字符串是否为回文
        start = 0
        max_length = 1
        for i in range(n-1, -1, -1):
            for j in range(i, n):
                if (s[i] == s[j] and j - i <= 2) or (s[i] == s[j] and f[i+1][j-1]):
                    f[i][j] = True
                if f[i][j] and j - i + 1 > max_length:
                    start = i
                    max_length = j - i + 1
        return s[start:start+max_length]

END.

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页