心路历程:
这道题本质在考察双指针和移动窗口的思想,虽然不难但是自己第一次写代码很冗余。
注意的点:
1、注意回文子串是需要分奇偶讨论的
2、函数传参可以假设是偶数情况下的子串,奇数就可以直接i,i赋值
解法:移动双指针
class Solution:
def longestPalindrome(self, s: str) -> str:
res = ""
for i in range(len(s)):
# 以 s[i] 为中心的最长回文子串
s1 = self.palindrome(s, i, i)
# 以 s[i] 和 s[i+1] 为中心的最长回文子串
s2 = self.palindrome(s, i, i + 1)
res = res if len(res) > len(s1) else s1
res = res if len(res) > len(s2) else s2
return res
def palindrome(self, s, l, r):
while (l >= 0 and r < len(s) and s[l] == s[r]):
l -= 1
r += 1
return s[l+1:r]