题目来源:
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
时间: 2024-09-30 06:29:23