leetcode131_分割回文串

給定一個字符串 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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章