题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
解答
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
# 思路一:中心拓展
def extend_from_center(left,right):
# 从中心向两侧检测回文
while left>=0 and right < len(s) and s[left]==s[right]:
left-=1
right+=1
return s[left+1:right]
# 预先声明longest_palindrome
longest_palindrome = ""
for i in range(0,len(s)):
# 奇数回文子串
palindrome1=extend_from_center(i,i)
# 偶数回文子串
palindrome2=extend_from_center(i,i+1)
# 迭代最长回文串
longest_palindrome=max(longest_palindrome, palindrome1, palindrome2, key=len)
return longest_palindrome
# # 思路二:动态规划
# n = len(s)
# if n <= 1:
# return s # 单字符或空字符串直接返回
# # 初始化 dp 表,dp[i][j] 表示 s[i:j+1] 是否是回文
# dp = [[False] * n for _ in range(n)]
# start, max_length = 0, 1 # 记录最长回文子串的起始位置和长度
# # 所有长度为 1 的子串是回文
# for i in range(n):
# dp[i][i] = True
# # 判断所有长度为 2 的子串是否是回文
# for i