给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
暴力:
class Solution:
def partition(self, s: str) -> List[List[str]]:
if not s:
return [[]]
length, res = len(s), []
if len(s) == 1:
return [[s]]
for i in range(1, length+1):
before = s[:i]
if before != before[::-1]:
continue
for after in self.partition(s[i:]):
res += [[before] + after]
return res
回溯:
class Solution:
def partition(self, s: str):
self.res = []
self.helper(s, 0, len(s), [])
return self.res
def helper(self, s, start, end, tmp):
if start >= end:
self.res.append(tmp.copy())
return
for i in range(start+1, end+1):
if s[start:i] == s[start:i][::-1]:
tmp.append(s[start:i])
self.helper(s, i, end, tmp)
tmp.pop(-1)