labuladong 如何寻找最长回文子串
5. 最长回文子串
- 回文串的长度可能是奇数也可能是偶数,如果是 abba这种情况,没有一个中心字符。所以可以:
- 找到以 s[i] 为中心的回文串(对奇数回文串),
找到以 s[i] 和 s[i+1] 为中心的回文串(对偶数回文串),
更新答案
- 找到以 s[i] 为中心的回文串(对奇数回文串),
- 选择最长的回文串,保存在res中
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
def palindrome(s,l,r):
# 若左右指针没越界,且元素相等,则指针向两边扩散
while l>=0 and r<len(s) and s[l]==s[r]:
l-=1
r+=1
return s[l+1:r]
res=""
for i in range(len(s)):
s1=palindrome(s,i,i)
s2=palindrome(s,i,i+1) #这里越界无所谓,因为调用palindrome时已经不满足while条件,可直接跳出
# 选择最长的回文串保存在res中
res=res if len(res)>len(s1) else s1
res=res if len(res)>len(s2) else s2
return res