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))

  注:

主要思想是中心扩展法。回文子串有可能是奇数个,有可能是偶数个,所以中心扩展要分一个字符和二个字符两种情况进行扩展。

posted @ 2019-08-28 21:32  尘世中一个迷途小书童  阅读(185)  评论(0编辑  收藏  举报