131. 分割回文串¶
难度:中等
题目¶
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是 回文串1 。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a"
输出:[["a"]]
提示:
1 <= s.length <= 16
s
仅由小写英文字母组成
题解¶
使用回溯算法,记录当前已经分割的字串。在剩下的字符串中寻找有效的切点,满足切点左侧的子串是回文串。当剩下的字符串为空时,当前分割构成一种有效的分割方案,将其加入到结果集中。
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
-
回文 串是向前和向后读都相同的字符串。 ↩