题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
思路:中心扩散法——遍历每一个索引,以这个索引为中心,利用“回文串”中心对称的特点,往两边扩散,看最多能扩散多远。
在这里需要注意一个细节:回文串在长度为奇数和偶数的时候,“回文中心”的形式是不一样的。
1、奇数回文串的“中心”是一个具体的字符,例如:回文串“aba”的中心是字符“b”;
2、偶数回文串的“中心”是位于中间的那两个字符,如:回文串“abba”的中心是两个“bb”;
Python解法:
class Solution:
def longestPalindrome(self, s: str) -> str:
size = len(s)
if size < 2:
return s
# 至少是 1
max_len = 1
res = s[0]
for i in range(size):
palindrome_odd, odd_len = self.__center_spread(s, size, i, i)
palindrome_even, even_len = self.__center_spread