题目简述:找到字符串里面所有的回文串
一般这种要找到所有可能的,基本上都是回溯题目
var partition = function (s) {
let res = []
let currentStr = []
// 判断 [left, right] 是否是回文
var isPalindrome = function (left, right) {
while (left < right) {
if (s[left] !== s[right]) return false
left++
right--
}
return true
}
var backtrack = function (start) {
if(start >= s.length){
res.push([...currentStr])
return
}
for (let end = start; end < s.length; ++end) {
if (isPalindrome(start, end)) {
currentStr.push(s.slice(start, end + 1))
backtrack(end + 1)
currentStr.pop()
}
}
}
backtrack(0)
return res
};
对于测试用例 s = 'aab',第一轮得到的结果是['a', 'a', 'b']
此时start = s.length,就会跳出当前递归
开始第二轮递归了,此时start = 0, end = 1,会得到 'aa'