题目:
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是
回文串
。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a" 输出:[["a"]]
难点:这里用到一个很取段的思路,其实和取点的内容差不多,但是取端更难理解。
思路:直接看回溯函数的内容,首先我们是取段的,如果这一段不行那就往后面加1,直到加道循环结束。然后就被pop掉。如果可以取端,并且取到了最后一段,也就是开始的startIndex大于等于size那么就代表这一条都是回文字符串。然后需要一个判断函数,判断字符串是否为回文字符串,如果是往path里面加。
学到的新函数:array.substr( a ,b) a表示字符串的开始,b表示数量 含义:选取字符串array从a开始往后的b个数
看代码:
class Solution {
private:vector<vector<string>> result;vector<string> path;void backtraking(string s,int startIndex){if(startIndex > s.size()-1){result.push_back(path);return;}for(int i = startIndex;i < s.size();i++){if(check(s,startIndex,i)){string str = s.substr(startIndex,i-startIndex+1);path.push_back(str);}else {continue;}backtraking(s,i+1);path.pop_back();}}bool check(string s,int a,int b){int left = a;int right = b;for(; left < right; left++,right--){if(s[left] != s[right])return false;}return true;}public:vector<vector<string>> partition(string s) {backtraking(s,0);return result;}
};