Friday, September 12, 2014

Leetcode: Palindrome Partitioning @Python

class Solution:
    # @param s, a string
    # @return a list of lists of string
    def isPalindrome(self, s):
        pattern = re.compile('[\W_]+')
        A=pattern.sub('', s.lower())
        return A==A[::-1]
    def partition(self, s):
        n=len(s)
        rst=[]
        stack=[([],0)]
        ptable=[[False for i in range(n)] for j in range(n)]
        for i in range(n):
            for j in range(i+1,n+1):
                ptable[i][j-1]=self.isPalindrome(s[i:j])
        i=0
        while stack:
            crt=[]
            for i in stack:
                if i[1]==n:
                    rst.append(i[0])
                    continue
                j=i[1]+1
                while j<=n:
                    if ptable[i[1]][j-1]==True:
                        temp=i[0]+[s[i[1]:j]]
                        crt.append((temp,j))
                    j+=1
            stack=crt
        return rst

No comments :

Post a Comment