分割回文串 131


这也是用回溯解决,回溯就是多层for循环,但是这一题有点难发现多层for循环体现在哪里。
实际上该问题for循环的层数与字符串的间隔有关
for循环的层数代表,分割线的个数;for循环的遍历代表这分割线的位置。
这里引用卡哥的图:

因为分割线不能取前一个的位置,所以要根据之前组合那题的套路,要引用startflag这个参数。
整体上还是脱离不了卡哥讲的那个框架。

点击查看代码
void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

完整代码:

点击查看代码
class Solution {
public:
vector<string>v;
vector<vector<string>>cnt;
string temp;
bool huiwen(string s,int left,int right){
    while(left<=right){
        if(s[left]!=s[right]){return false;}
        ++left;
        --right;
    }
    return true;
}
void backtracking(string s,int startflag){
    if(startflag>=s.size()){
        cnt.push_back(v);
        return ;
    }
    for(int i=startflag;i<s.size();i++){
if(huiwen(s,startflag,i)){
    string str=s.substr(startflag,i-startflag+1);
    v.push_back(str);
}
else{continue;}
backtracking(s,i+1);
v.pop_back();
    }
}
    vector<vector<string>> partition(string s) {
backtracking(s,0);
return cnt;
    }
};
posted @ 2024-01-18 16:39  yun-che  阅读(16)  评论(0)    收藏  举报