[LeetCode]题解(python):131-Palindrome Partitioning

Posted Ry_Chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]题解(python):131-Palindrome Partitioning相关的知识,希望对你有一定的参考价值。

题目来源:

  https://leetcode.com/problems/palindrome-partitioning/


 

题意分析:

  给定一个字符串s,将s拆成若干个子字符串,使得所有的子字符串都是回文字符串,返回所有这样的子字符串集合。比如s = “aab”,那么返回[["aa","b"],["a","a","b"]]。


 

题目思路:

  这是一个动态规划问题,如果s[:i]是回文字符串,那么s[:i] X solve(s[i+1:]),(X是笛卡尔乘积,solve(s[i+1:])是s[i+1:]的答案)。所以只需要判断s[:i]是不是回文就可以了。


 

代码(python):

技术分享
 1 class Solution(object):
 2     def partition(self, s):
 3         """
 4         :type s: str
 5         :rtype: List[List[str]]
 6         """
 7         m = len(s)
 8         if m == 0:
 9             return []
10         def isp(i,j):
11             while i < j:
12                 if s[i] != s[j]:
13                     return False
14                 i += 1
15                 j -= 1
16             return True
17         def solve(i):
18             ans = []
19             if i == m - 1:
20                 return [[s[i]]]
21             j = i
22             while j < m:
23                 if isp(i,j):
24                     tmp = solve(j + 1)
25                     if len(tmp) == 0:
26                         ans.append([s[i:j + 1]])
27                     else:
28                         for k in tmp:
29                             ans.append([s[i:j + 1]] + k)
30                 j += 1
31             return ans
32         return solve(0)
33                     
34                     
View Code

 

以上是关于[LeetCode]题解(python):131-Palindrome Partitioning的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题Python131. 分割回文串

《LeetCode之每日一题》:131.有效的字母异位词

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解