最长回文子串
目录
最长回文子串
题目:
https://leetcode-cn.com/problems/longest-palindromic-substring/
思路:
一开始暴力解法,比较好想,结果超时了哎,后来看见了标签是动态规划,才知道不能暴力
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s) <= 1:
return s
= -float("inf")
maxs = collections.defaultdict(list)
res = 0,len(s)-1
left,right while left < right:
for i in range(left,right+2):
if s[left:i] == s[left:i][::-1]:
= max(maxs,len(s[left:i]))
maxs
res[maxs].append(s[left:i])+= 1
left return max(res[max(res.keys())],key=len)
也用到了双指针,超时在情理之中。
后来用到了动态规划
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s) <= 1:
return s
= len(s)
length = [[False for _ in range(length)] for _ in range(length)]
dp for i in range(length):
= True
dp[i][i] = 0
start = 1
max_len for j in range(1, length):
for i in range(0, j):
if s[i] == s[j]:
if j - i < 3:
= True
dp[i][j] else:
= dp[i + 1][j - 1]
dp[i][j] else:
= False
dp[i][j]
if dp[i][j]:
= j - i + 1
cur_len if cur_len > max_len:
= cur_len
max_len = i
start return s[start:start + max_len]