TheLongestPalindromicSubstring长回文子串。您可以假设s的最大长度为1000。示例1:输入:“babad”输出:“bab”注意:“aba”也是一个有效答案。例2:输入:"cbbd"输出:"bb"按照回文的理解,回文中心的两侧其实是互为镜像的。然后回文可以从它的中心展开。回文子串的长度可以是奇数也可以是偶数。在奇数的情况下,回文的中心是中间的字符,在偶数的情况下,回文的中心是中间两个字符之间的空格。这里借助一个扩散函数,传入的值就是字符的索引值。如果传入的索引值重合,则扩散得到的回文子串长度为奇数;如果传入的索引值是相邻的,那么得到的回文子串是偶数的。代码实现类解法:deflongestPalindrome(self,s:str)->str:length=len(s)iflength<2:returnsmax_sub_len=1start=0foriinrange(length):#两种类型在同时情况扩散#在单个字符的情况下,或者在两个字符之间的空格为中心的情况下odd_sub_len=self.__expand_around_center(s,length,i,i)even_sub_len=self.__expand_around_center(s,length,i,i+1)#比较两种情况返回的子串的长度,取较大的值sub_len=max(odd_sub_len,even_sub_len)ifsub_len>max_sub_len:max_sub_len=sub_len#调整子串的起始位置,#如果传入的是相邻的值,则在左边值的索引是根据#此时中心在两个值的间隙中,调整起始位置注-1#如果传入值重合,即字符为中心,这种方法同样适用,相当于manualdirectionRounddownstart=i-(sub_len-1)//2returns[start:start+max_sub_len]def__expand_around_center(self,s,length,left,right):#如果传入值left=right,则为一个奇数回文子串#如果传入值left+1=right,也就是相邻值,是一个偶数回文子串i=leftj=right#满足条件向左右扩散whilei>=0andj
