LeetCode题解(python)
5. 最长回文子串
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
解题心得:
对此类问题使用中心扩散算法。
类似于使用两个指针从中间开始往两边移动,依次判断是否满足条件(构成回文),选取最长的回文更新回文子串的存储列表。
解题代码:
class Solution:
def longestPalindrome(self, s: str) -> str:
#中心扩散算法
ls_double = 2*len(s)-1
spalindrome = ""
for i in range(ls_double):
if i%2 == 0:
left = int(i/2)
right = int(i/2)
while left>=0 and right<len(s) and s[left] == s[right]:
left = left - 1
right = right + 1
else:
left = int((i-1)/2)
right = int((i+1)/2)
while left>=0 and right<len(s) and s[left] == s[right]:
left = left -1
right = right + 1
if len(spalindrome) < (right-left-1):
spalindrome = s[left+1:right]
return spalindrome