切割问题

image.png

判断回文子串

利用双指针法

  1. var partition = function(s) {
  2. // 双指针判断回文字符串
  3. const isPalindrome =(s,l,r) =>{
  4. for(let i=l,j=r;i<j;i++,j--){
  5. if(s[i]!==s[j]) return false;
  6. }
  7. return true;
  8. }
  9. let res =[];
  10. let path =[];
  11. const sLength =s.length;
  12. const backTracing =function(startIndex){
  13. if(startIndex>=sLength){
  14. //一组切割完毕
  15. res.push([...path]);
  16. return;
  17. }
  18. for(let m =startIndex;m<sLength;m++){
  19. if(!isPalindrome(s,startIndex,m)) continue;//不是回文就跳过找下一组
  20. path.push(s.slice(startIndex,m+1));//截取子串放入path,左闭右开
  21. backTracing(m+1);//切割过的地方不再切割,所以从m+1开始
  22. path.pop(); //回溯
  23. }
  24. }
  25. backTracing(0);
  26. return res;
  27. };

image.png