给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例1
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例2
输入: “cbbd”
输出: “bb”
解题思路
中心扩展法判断是否符合回文要求,分两种情况,具体如示例1和2
代码实现
class Solution(object):
def longestPalindrome(self, s):
def find(s, left, right):
while left>=0 and right<len(s) and s[left]==s[right]:
left -= 1
right += 1
return right - left - 1 #因为判断是否满足条件时left多减了1,所以计算长度需要减1
start = 0
end = 0
for i in range(len(s)):
len1 = find(s, i, i)
len2 = find(s, i, i+1)
max_len = max(len1, len2)
if max_len > end - start + 1:
# 长度为奇数
if max_len % 2 ==1:
start = int(i - (max_len-1) / 2)
end = int(i + (max_len-1) / 2)
# 长度为偶数
else:
start = int(i + 1 - max_len / 2)
end = int(i + max_len / 2)
return s[start:end+1]