切割问题
判断回文子串
利用双指针法
var partition = function(s) {
// 双指针判断回文字符串
const isPalindrome =(s,l,r) =>{
for(let i=l,j=r;i<j;i++,j--){
if(s[i]!==s[j]) return false;
}
return true;
}
let res =[];
let path =[];
const sLength =s.length;
const backTracing =function(startIndex){
if(startIndex>=sLength){
//一组切割完毕
res.push([...path]);
return;
}
for(let m =startIndex;m<sLength;m++){
if(!isPalindrome(s,startIndex,m)) continue;//不是回文就跳过找下一组
path.push(s.slice(startIndex,m+1));//截取子串放入path,左闭右开
backTracing(m+1);//切割过的地方不再切割,所以从m+1开始
path.pop(); //回溯
}
}
backTracing(0);
return res;
};