python leetcode 5. Longest Palindromic Substring

代码一:Manacger算法

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
		def manacherString(s):
            res='#'
            for c in s:
                res=res+c+'#'
            return res 
        mans=manacherString(s)
        ls = len(s)
        if ls<2:
            return s
        ls=2*ls+1
        mymax=-2**32
        index=-1
        pArr = [0]*ls
        pr=-1
        start=0
        for i in range(ls):
            pArr[i] = min(pArr[2*index-i],pr-i) if pr > i else 1 
            while i+pArr[i] < ls and i-pArr[i] > -1:
                if mans[i+pArr[i]] == mans[i-pArr[i]]:
                    pArr[i]+=1
                else:
                    break 
            if i+pArr[i] > pr:
                pr = i+pArr[i]
                index = i
            if pArr[i]>mymax:
                mymax = pArr[i]
                start = i
        mymax-=1
        return mans[start-mymax+1:start+mymax+1:2]

代码二:简单易懂 头尾遍历

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
#分两种情况 1. aba这种 2.aaaaa这种 其中1包括2 
        n = len(s)
        start = 0 
        maxlen = 0 
        for i in range(n):
            if i-maxlen >=1 and s[i-maxlen-1:i+1] == s[i-maxlen-1:i+1][::-1]:
                start = i - maxlen -1 
                maxlen += 2 
                continue 
            if i - maxlen >=0 and s[i-maxlen:i+1] == s[i-maxlen:i+1][::-1]:
                start = i - maxlen 
                maxlen += 1 
        return s[start:start+maxlen]

猜你喜欢

转载自blog.csdn.net/Neekity/article/details/84799525