class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
n = len(s)
maxL, maxR, max = 0, 0, 0
for i in range(n):
# 长度为偶数的回文字符串
start = i
end = i + 1
while start >= 0 and end < n:
if s[start] == s[end]:
if end - start + 1 > max:
max = end - start + 1
maxL = start
maxR = end
start -= 1
end += 1
else:
break
# 长度为奇数的回文子串
start = i - 1
end = i + 1
while start >= 0 and end < n:
if s[start] == s[end]:
if end - start + 1 > max:
max = end - start + 1
maxL = start
maxR = end
start -= 1
end += 1
else:
break
return s[maxL:maxR+1]
解题思路
本代码基于暴力枚举法的一个改良,
提出一个优化的方案,通过枚举字符串子串的中心而不是起点,向两边同时扩散,依然是逐一判断子串的回文性。这种优化算法比之前的算法在最坏的情况下(即只有一种字符的字符串)效率会有很大程度的上升。
通过结果
![](https://i-blog.csdnimg.cn/blog_migrate/28bdf131e9bee2de99e2040d8cd7ea74.png)