leetcode 5. Longest Palindromic Substring

来源:互联网 发布:经济增长数据 编辑:程序博客网 时间:2024/04/28 17:31

给一个字符串求最长公共字串。直接上o(n)的Manacher,方法网上很多讲的都挺详细,需要的自行百度吧

class Solution(object):    def pre(self,s):        lenS = len(s)        i = 0        res = []        while i < lenS:            res.append('#')            res.append(s[i])            i+=1        res.append('#')        return res    def longestPalindrome(self, s):        """        :type s: str        :rtype: str        """        ss = self.pre(s)        lenS = len(ss)                        p = [1 for i in range(lenS+1)]        id = 0         mx = 0        i = 0        while i < lenS:            if mx > i :                p[i] = min(p[id*2-i],p[id]+id-i)            else : p[i] = 1            while i - p[i] >= 0 and i+p[i] < lenS and ss[i+p[i]] == ss[i-p[i]]: p[i] += 1            if (p[i] + i > mx):                 mx = p[i] + i                id = i            i += 1        ans = 0        i = 0        id = 0             while i < lenS:            if (ans < p[i]):                ans = p[i] - 1                id = i // 2            i += 1                id = id - ans // 2                return s[id:id+ans]        


0 0