136. 分割回文串

136. 分割回文串

中文English

给定字符串 s, 需要将它分割成一些子串, 使得每个子串都是回文串.

返回所有可能的分割方案.

样例

样例 1:

输入: "a"
输出: [["a"]]
解释: 字符串里只有一个字符, 也就只有一种分割方式 (就是它本身)

样例 2:

输入: "aab"
输出: [["aa", "b"], ["a", "a", "b"]]
解释: 有两种分割的方式.
    1. 将 "aab" 分割成 "aa" 和 "b", 它们都是回文的.
    2. 将 "aab" 分割成 "a", "a" 和 "b", 它们全都是回文的.

注意事项

  1. 不同的方案之间的顺序可以是任意的.
  2. 一种分割方案中的每个子串都必须是 s 中连续的一段.
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param: s: A string
    @return: A list of lists of string
    """
    def partition(self, ss):
        if not ss:return None

        #初始条件
        dp = [[] for _ in range(len(ss))]
        dp[0] = [[ss[0]]]

        #计算顺序
        for i in range(1,len(ss)):
            for j in range(i+1):
                s = ss[j:i] + ss[i]
        
                
                #边界情况
                if s == s[::-1]:
                    if j == 0:
                        dp[i].append([ss[:i+1]])
                        continue

                    for dic in dp[j-1]:
                        append_dic = dic + [s]
                        dp[i].append(append_dic)
        return dp[-1]

 

posted @ 2020-05-30 16:27  风不再来  阅读(165)  评论(0编辑  收藏  举报