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
从小往大遍历,且注意j
比i
大,从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.