题目
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。
思路
中心扩散
以str[i]为中心
或者如果str[i] == str[i + 1],以str[i]和str[i + 1]这个整体为中心
class Solution:
def longestPalindrome(self, s: str) -> str:
length = len(s)
if length <= 1: return s
max_palindrome = ''
for i in range(length):
tmp = self.helper(s, i, length)
max_palindrome = tmp if len(tmp) > len(max_palindrome) else max_palindrome
return max_palindrome
def helper(self, s, mid, length):
# 以当前mid为中心遍历一遍
left, right = mid - 1, mid + 1
odd_str = s[mid]
while left >= 0 and right < length and s[left] == s[right]:
odd_str = s[left : right + 1]
left -= 1
right += 1
even_str = s[mid]
if mid + 1 < length and s[mid] == s[mid + 1]:
left = mid
right = mid + 1
even_str = s[left : right + 1]
while left >= 0 and right < length and s[left] == s[right]:
even_str = s[left : right + 1]
left -= 1
right += 1
return odd_str if len(odd_str) > len(even_str) else even_str
- 需要进一步完善