5. 最长回文子串(中等)
题目
给你一个字符串 s,找到 s 中最长的回文子串。
思路
for 依次遍历字符串:
向左扩展直到字符不同,l-1>=0
向右扩展直到字符不同,r+1<=len(s)-1
(保证中间的字符一样)
l-1>=0 and r+1<=len(s)-1 and s[l-1]==s[r+1]
(保证左右字符相同)
如果 回文长度>max:
记录 l max
return s[l:l+max]
代码
###Python
class Solution:
def longestPalindrome(self, s: str) -> str:
max=0
l_end=0
for i in range(0,len(s)):
l=i
r=i
length=1
while(r+1<=len(s)-1):
#print(1)
if s[r]==s[r+1]:
r+=1
length+=1
else:
break
while(l-1>=0):
#print(2)
if s[l]==s[l-1]:
l-=1
length+=1
else:
break
while(r+1<=len(s)-1 and l-1>=0):
# print(3)
if s[l-1]==s[r+1]:
l-=1
r+=1
length+=2
else:
break
if length > max:
max=length
l_end=l
return s[l_end:l_end+max]