LeetCode 5. 最长回文子串python3
原题链接
中等
作者:
xanxus1111
,
2020-06-03 22:05:37
,
所有人可见
,
阅读 380
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
if n < 2 or s == s[::-1]: #如果数组长度小于2或者正反相等,那么return
return s
max_len = 1
start = 0
for i in range(1,n): # i是左指针 从1开始遍历
even = s[i-max_len:i+1] #获取偶数切片
odd = s[i-max_len-1:i+1] #获取奇数切片
if i-max_len-1>=0 and odd == odd[::-1]: #确保起始下标为正,且切片是回文
start = i-max_len-1 # 更新起始下标
max_len += 2 # 判断奇数回文序列时 i-max_len-1 多减了一个1所以要加回来
if i-max_len>=0 and even == even[::-1]: #确保起始下标为正,且切片是回文
start = i-max_len # 更新起始下标
max_len += 1 # 更新max_len
return s[start:start+max_len]