131. 分割回文串-c++

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是
回文串
。返回 s 所有可能的分割方案。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:

输入:s = "a"
输出:[["a"]]

class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>>res;
        vector<string>re;

        backtrack(s,0,res,re);
        return res;
    }
    bool isPalindrome(string& s,int left,int right)
    {
        while(left<right)
        {
            if(s[left]!=s[right])
            {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
    void backtrack(string& s , int start , vector<vector<string>>&res,vector<string>&re)
    {
        if(start==s.length())
        {
            res.push_back(re);
            return;
            
        }
        for(int i=start;i<s.length();i++)
        {
            if(isPalindrome(s,start,i))
            {
                string tmp=s.substr(start,i-start+1);
                re.push_back(tmp);
                backtrack(s,i+1,res,re);
                re.pop_back();
            }
        }
    }
};
posted @ 2024-05-08 17:10  东岸  阅读(87)  评论(0)    收藏  举报