[Leetcode]Palindrome Partitioning

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [
    ["aa","b"],
    ["a","a","b"]
  ]

给定一个字符串s,切割s,使得每个子字符串都是回文串,返回所有可能的切割法~先维护一个二维数组isPal,isPal[i][j]代表第i个字符到第j个字符是否是回文串~然后用DFS递归返回所有的切割方式(如果当前的字符串是回文串,就递归处理剩下的字符串)~代码如下

class Solution:
    # @param s, a string
    # @return a list of lists of string
    def partition(self, s):
        if s is None or len(s) == 0: return [""]
        self.res = []
        self.isPal = [[False] * len(s) for i in xrange(len(s))]
        for i in xrange(len(s) - 1, -1, -1):
            for j in xrange(i, len(s)):
                if (j - i <= 1 or self.isPal[i + 1][j - 1]) and s[i] == s[j]:
                    self.isPal[i][j] = True
        self.helper(s, 0, [])
        return self.res
        
    def helper(self, s, start, tmp):
        if start == len(s):
            self.res.append(tmp[:])
            return
        for i in xrange(start, len(s)):
            if self.isPal[start][i]:
                tmp.append(s[start: i + 1])
                self.helper(s, i + 1, tmp)
                tmp.pop()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值