給定一個字符串 s,將 s 分割成一些子串,使每個子串都是迴文串。返回 s 所有可能的分割方案。
示例:
輸入: “aab”
輸出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
由於要求給出具體路徑,這裏考慮回溯法
這種題目其實有一個通用的解法,模板:
1, 以當前位置爲源流往下摸排所有可以跳到的位置
2, 最終遞歸返回源流位置
3, 然後再以下面一個位置作爲源流位置,重複上述操作
class Solution:
def partition(self, s: str) -> List[List[str]]:
path = []
result = []
self._dfs(s, path, 0, result)
return result
def _dfs(self, s, path, index, result):
# 邊界,源流位置已經越界,將這條路徑加入result, return
if index == len(s):
result.append(path.copy())
return
# 從源流位置開始遍歷每個位置,如果源流位置到當前位置之間的字符串爲迴文
for i in range(index+1, len(s)+1):
if s[index:i] == s[index:i][::-1]:
# 將回文存入路徑
path.append(s[index:i])
# 把當前位置的下一個點作爲新的源流,往下摸排
self._dfs(s, path, i, result)
# 最終返回源流位置,然後再看下一個位置
path.pop()