题目:给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
start,maxlen = 0,0
def longestPalinrome(s):
if len(s)<2:
return s
for i in range(len(s)):
extendPal(s,i,i)
extendPal(s,i,i+1)
return s[start:start+maxlen]
def extendPal(s,left,right):
global maxlen,start
while left>=0 and right<len(s) and s[left]==s[right]:
left-=1
right+=1
if maxlen<right-left-1:
start = left+1
maxlen = right-left-1
s1 = 'babad'
s2 = 'cbbd'
print(longestPalinrome(s1))
print(longestPalinrome(s2))
注:
主要思想是中心扩展法。回文子串有可能是奇数个,有可能是偶数个,所以中心扩展要分一个字符和二个字符两种情况进行扩展。