1.中心扩散法
-
枚举所有字串的中心位置(循环遍历)
-
字串长度为奇数(一个字符);偶数(2个字符)
-
以当前位置字符为中心往两边扩散
class Solution:
// 回文串的中心位置
def expandAroundCenter(self, s, left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1 // 往左扩散
right += 1 // 往右扩散
return left + 1, right - 1
def longestPalindrome(self, s: str) -> str:
start, end = 0, 0
// 枚举所有可能的中心位置
for i in range(len(s)):
// 当回文串长度为奇数时
left1, right1 = self.expandAroundCenter(s, i, i)
// 当回文串长度为偶数时
left2, right2 = self.expandAroundCenter(s, i, i + 1)
// 求回文串的最大长度
if right1 - left1 > end - start:
start, end = left1, right1
if right2 - left2 > end - start:
start, end = left2, right2
// 返回最长回文字串
return s[start: end + 1]