码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-03-28 21:55:03      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

题目来源:

  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

标签:

原文地址:http://www.cnblogs.com/chruny/p/5330635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!