原题链接:https://leetcode.cn/problems/M99OJA/
算法标签:深度优先搜索、回溯
代码:
class Solution {
private:
vector<string> tmp;
vector<vector<string>> ans;
public:
vector<vector<string>> partition(string s) {
dfs(s, 0);
return ans;
}
void dfs(string s, int st){
int len =s.length();
if(st == len){
ans.push_back(tmp);
return;
}
for( int end=st+1; end<=len; end++ ){
if(check(s, st, end)){ // 判断从st到end-1组成的新串是否为回文串
tmp.push_back(s.substr(st, end-st));
dfs(s, end);
tmp.pop_back(); //回溯法
}
}
}
bool check(string s, int st, int end){
bool flag = true;
for( int i=st, j=end-1; i<=j; i++, j-- ){
if(s[i] != s[j]){
flag = false;
break;
}
}
return flag;
}
};