leetcode-分割回文串
分割回文串
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
字符串i到j之间是回文则有i+1, j-1 之间是回文字符串
def f(s):
n = len(s)
dp = [[True]*n for _ in range(n)]
for i in range(n-1, -1, -1):
for j in range(i+1, n):
dp[i][j] = (s[i] == s[j]) and dp[i+1][j-1]
ret = []
ans = []
def dfs(i):
if i == n:
ret.append(ans[:])
return
for j in range(i, n):
if dp[i][j]:
ans.append(s[i:j+1])
dfs(j+1)
ans.pop()
dfs(0)
return ret
然后扩展最少分割次数最少
知道字符串i,j之间是否为字符串
0,i之间次数, 0,j,i ,假设知道 j ~ i是否为字符串, 0~j次数