131.分割回文串

class Solution {
public:
    string s;vector<vector<string>>res;vector<string>cur;
    bool valid(int l,int r){
        int lptr=l,rptr=r;while(lptr<=r){if(s[lptr]!=s[rptr])return false;lptr++;rptr--;}return true;
    }
    void bt(int start){
        if(start==s.size()){res.push_back(cur);return;}
        for(int i=start;i<s.size();i++){
            if(valid(start,i)){
                cur.push_back(s.substr(start,i-start+1));
                bt(i+1);
                cur.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        this->s=s;bt(0);return res;
    }
};