5-最长回文子串
题目:给定一个字符串 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))
注:
主要思想是中心扩展法。回文子串有可能是奇数个,有可能是偶数个,所以中心扩展要分一个字符和二个字符两种情况进行扩展。