Thursday, September 18, 2014

Leetcode: Longest Palindromic Substring @Python

class Solution:
    # @return a string
    def longestPalindrome(self, s):
        n=len(s)
        inputstr=s
        s=list(s)
        i=0
        L=2*n+1
        #insert '#' into the string so that the even and odd palidrome are the same
        while i<L:
            s.insert(i,'#')
            i+=2
        right=0
        P=[0]*L
        mid=0
        for i in range(1,L):
            if i<right:
                mirror=2*mid-i                
                if i+P[mirror]<right:
                    P[i]=P[mirror]
                    continue
                else:
                    P[i]=right-i
            j=P[i]+1
            while 0<=i-j and i+j<L and s[i-j]==s[i+j]:
                P[i]+=1
                j+=1
            mid=i
            right=mid+P[i]                
        index,maxlen=max(enumerate(P),key=operator.itemgetter(1))
        seq=int(index//2-P[index]// 2)
        rst=inputstr[seq:seq+P[index]]
        return rst

No comments :

Post a Comment