跳转至

131. 分割回文串

难度:中等

题目

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串1 。返回 s 所有可能的分割方案。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

Reference

题解

使用回溯算法,记录当前已经分割的字串。在剩下的字符串中寻找有效的切点,满足切点左侧的子串是回文串。当剩下的字符串为空时,当前分割构成一种有效的分割方案,将其加入到结果集中。

class Solution:
    def dfs(self, s: str, prefix: List[str], results: List[List[str]]):
        if not s:
            results.append([*prefix])
        for i in range(1, len(s) + 1):
            left = s[:i]
            if left != left[::-1]:
                continue
            prefix.append(left)
            self.dfs(s[i:], prefix, results)
            prefix.pop(-1)

    def partition(self, s: str) -> List[List[str]]:
        prefix, results = [], []
        self.dfs(s, prefix, results)
        return results

  1. 回文 串是向前和向后读都相同的字符串。 

评论