5.最长回文子串
给定一个字符串s,找出s中的最长回文子串。
思路:为了降低时间复杂度,先写个for循环,把每个字符作为回文子串的中间点。再从中心点左右扩展找出该中心点的最大回文子串。第二步单独写个函数完成。注意子串分奇数串和偶数串,注意边界取值。
class Solution(object):
def longestPalindrome(self, s):
m=l=r=0
for i in range(len(s)):
len_1=self.function(s,i,i) #奇数字符串
len_2=self.function(s,i,i+1) #偶数字符串
m=max(len_1,len_2)
if m>=r-l+1: #若最长则更新,注意边界
l=i-(m-1)//2
r=i+m//2
return s[l:r+1]
def function(self,s,l,r):
while l=>0 and r<len(s) and s[l]==s[r]: #注意l和r的边界
l=l-1
r=r+1
return r-l-1
#判定成功后l,r又循环一遍,相当于+2,所以不是r-l+1而是-1