[131][中等][DFS][回溯][动态规划] 分割回文串
最后更新于
最后更新于
class Solution:
def partition(self, s: str) -> List[List[str]]:
self.s = s
self.n = len(s)
if self.n == 0:
return []
self.results = []
self.cache = [[False] * self.n for _ in range(self.n)]
for i in range(self.n - 1, -1, -1):
for j in range(self.n - 1, i - 1, -1):
if j - i > 1 and s[i] == s[j]:
self.cache[i][j] = self.cache[i + 1][j - 1]
elif j - i == 1:
self.cache[i][j] = s[i] == s[j]
elif j == i:
self.cache[i][j] = True
self.dfs(0, [])
return self.results
def dfs(self, i, path):
if i == self.n:
self.results.append(path[:])
return path
for j in range(i, self.n):
if self.cache[i][j]:
path.append(self.s[i:j + 1])
path = self.dfs(j + 1, path)
path.pop()
return path