131. Palindrome Partitioning

class Solution(object):
    def partition(self, s):
        """
        :type s: str
        :rtype: List[List[str]]
        """
        if s == "":
            return []
        result = []
        length = len(s)
        for i in range(len(s)):
            self.dfs(s[:i + 1], s[i + 1:], length, result, tmp=[])
        return result

    def dfs(self, before, after, length, result, tmp):
        if self.palindrome(before):
            tmp.append(before)
            if len(after) == 0 and sum(len(i) for i in tmp) == length:
                result.append(tmp)
            else:
                for i in range(len(after)):
                    copytmp = tmp[:]
                    self.dfs(after[:i + 1], after[i + 1:], length, result, copytmp)

    def palindrome(self, ss):
        for i in range(len(ss) / 2):
            if ss[i] != ss[len(ss) - 1 - i]:
                return False
        return True

if __name__ == '__main__':
    answer = Solution()
    print answer.partition("aab")

blogroll

social