给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
思路:
1.直接暴力搜索所有可能的子串判断是否为回文,不出意料超时。
2.中心扩散:选取一个中心点向两边扩散并判断是否为回文,并记录所有搜索到的最长回文并返回结果。
代码:
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s) < 2 or s == s[::-1]:
return s
n = len(s)
start, maxlen = 0, 1
for i in range(1, n):
odd = s[i - maxlen - 1:i + 1]
even = s[i - maxlen:i + 1]
if i - maxlen - 1 >= 0 and odd == odd[::-1]:
start = i - maxlen - 1
maxlen += 2
continue
if i - maxlen >= 0 and even == even[::-1]:
start = i - maxlen
maxlen += 1
return s[start:start + maxlen]