题目:
难度:Middle
相关话题:回溯算法
给定一个字符串 s ,将s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入:"aab"
输出:
[
["aa","b"],
["a","a","b"]
]
思路:
回溯,start
为从当前哪个索引开始,检测以start
为开头的每一个子字符串,如果存在回文字符串,就添加到arr
中,直到start===s.length
, 说明当前arr
为其中一个解,添加到结果result
中。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {string} s
* @return {string[][]}
*/
var partition = function(s) {
let result=[]
backtrack([],0)
return result
function isP(str){
for(let i=0;i<str.length/2;i++){
if(str[i]!==str[str.length-1-i])return false
}
return true
}
function backtrack(arr,start){
if(start===s.length) result.push(arr.slice())
for(let i=start;i<s.length;i++){
let str=s.substring(start,i+1)
if(isP(str)){
arr.push(str)
backtrack(arr,i+1)
arr.pop()
}
}
}
};
扩展阅读: