s.substr(startIndex, endIndex);
startIndex用递归来控制, endIndex用循环来控制
==> 回溯算法:
递归==>控制层==>通过回溯(用栈来理解)
循环==>控制每一层的节点情况
class Solution {
public:
void Show(vector<char>& v){
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
}
bool checkPar(string s) {
bool flag = true;
int len = s.size(), i = 0;
if(s.size() == 1) return true;
while(i <= (len - 1) / 2) {
if(s[i] != s[len - 1 - i]) {
flag = false;
break;
}
i++;
}
return flag;
}
string getString(string s, int start, int end) {
int len = end - start + 1;
return s.substr(start, len);
}
vector<vector<string>> res;
vector<string> path;
int slen;
void dfs(string s, int startIndex) {
if(startIndex == slen) {
res.push_back(path);
return;
}
for(int i = startIndex; i < slen; i++) {
if(checkPar(getString(s, startIndex, i))) {
path.emplace_back(getString(s, startIndex, i));
dfs(s, i + 1);
path.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
slen = s.size();
dfs(s, 0);
return res;
}
};