给你一个字符串 s,请你将s分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a"
输出:[["a"]]
提示:
1 <= s.length <= 16s仅由小写英文字母组成
TypeScript
function partition(s: string): string[][] {
const n = s.length
const dp:boolean[][] = Array.from({length:n},()=>new Array(n).fill(false))
for(let i=0;i<n;i++){
dp[i][i] = true
}
for(let len=2;len<=n;len++){
for(let i=0;i<=n-len;i++){
const j = i + len - 1
if(s[i]===s[j]){
dp[i][j] = (len===2) || dp[i+1][j-1]
}
}
}
const result:string[][] = []
const path:string[] = []
const dfs = (start:number):void=>{
if(start===n){
result.push([...path])
return
}
for(let i=start;i<n;i++){
if(dp[start][i]){
path.push(s.substring(start,i+1))
dfs(i+1)
path.pop()
}
}
}
dfs(0)
return result
};
共勉