给你一个字符串
s,请你将s分割成一些 子串,使每个子串都是 回文串 。返回s所有可能的分割方案。示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
核心思路
回溯 + 回文判断
- 从
start开始,枚举分割位置 end - 截取
s[start:end],先判断是不是回文 - 是回文 → 加入路径,递归往下切
- 递归到末尾 → 收集答案
- 回溯撤销,尝试下一种切法
python
class Solution:
def partition(self, s: str) -> List[List[str]]:
res = []
path = []
n = len(s)
def is_palindrome(l, r):
while l < r:
if s[l] != s[r]:
return False
l += 1
r -= 1
return True
def backtrack(start):
if start == n:
res.append(path.copy())
return
for end in range(start, n):
if is_palindrome(start, end):
path.append(s[start:end+1])
backtrack(end + 1)
path.pop()
backtrack(0)
return res