131. 分割回文串
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a"
输出:[["a"]]
提示:
1 <= s.length <= 16
s
仅由小写英文字母组成
回溯
遍历字符串,首先一个值标记最左边的起点,然后找回文字符串,如果从起点开始的某个字符串是回文串,那么递归更新起点值为当前字符串的后一位,然后把这个回文串加入一个子集中。当起点大于字符串的终点时,子集为一个分割方案,加入result 数组中。
aab
起点 0
a 为回文字符串 => 起点更新为1 => a是回文字符串 => 起点更新为2 => b 是字符串
查找完毕,回溯到起点为0。
aa为字符串 => 起点更新为2 => b是字符串
/**
* @param {string} s
* @return {string[][]}
*/
var partition = function(s) {
let result = [];
let getS = function(s, left, right, arr) {
if(left>right) {
result.push([...arr]);
return ;
}
for(let i = left; i<=right; i++){
let bool = true;
let end = parseInt((i-left)/2+left);
for(let j =left; j<=end; j++){
if(s[j] != s[i - (j-left)]) bool = false;
}
if(bool){
let item = s.slice(left, i+1)
arr.push(item);
getS(s, i+1, right,arr);
arr.pop();
}
}
return ;
}
getS(s, 0, s.length-1, []);
return result;
};