Leetcode:131. 分割回文串 - 力扣(LeetCode) (leetcode-cn.com)
分为两部分:
1.动态规划确定子串是否是回文串
2.枚举子集
时间复杂度:O(n*2^n)
空间复杂度:O(n^2)
代码如下:
class Solution(object):
def partition(self, s):
"""
:type s: str
:rtype: List[List[str]]
"""
n=len(s)
f=[[True]*n for _ in s]
for i in range(n-1,-1,-1):
for j in range(i+1,n):
f[i][j]=f[i+1][j-1] and s[i]==s[j]
res=[]
ans=[]
def dfs(i):
if i>=n:
#这里是ans[:],而非ans!!!指针问题
res.append(ans[:])
return
for j in range(i,n):
if f[i][j]:
ans.append(s[i:j+1])
dfs(j+1)
ans.pop()
dfs(0)
return res