题目要求:给你一个字符串 s
,找到 s
中最长的回文子串。
题目分析:暴力破解,首先判断最长的是否是回文串,然后依次减小长度来判断是否为回文串。
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s)<2:
return s
#暴力破解
l=len(s)
for i in range(l,0,-1):
for j in range(l-i+1):
strs=s[j:j+i]
if strs==strs[::-1]:
return strs
return ""
其他方法后续补充
中心扩展法,分析:如果是单一的字符或者两个相同的字符一定是回文串,可由此向外扩展,如果两边的字符相同,则证明回文串扩大,如果不同,则说明不是回文串,由此方法来获得最长的回文串。
class Solution:
def longestPalindrome(self, s: str) -> str:
l=len(s)
start,end=0,0
for i in range(l):
#单个回文串
left1,right1=self.expend(s,i,i)
#两个相同的情况
left2,right2=self.expend(s,i,i+1)
if (right1-left1)>(end-start):
start,end=left1,right1
if (right2-left2)>(end-start):
start,end=left2,right2
return s[start:end+1]
def expend(self,s,left,right):
n=len(s)
#向外扩张,如果两边相同则继续向外,否则返回当前的长度
while left>=0 and right<n and s[left]==s[right]:
left-=1
right+=1
return left+1,right-1