回文子串划分 Palindrome Partitioning

来源:互联网 发布:mac上的打谱软件 编辑:程序博客网 时间:2024/06/05 14:37

问题:将一个字符串进行划分,要求划分成的子串都必须是回文串。找出所有可能的划分情况。

思路:backstrack吧,每一次只有在满足是回文的情况下深入下一层。

class Solution {public:    vector<vector<string>> partition(string s) {        vector<vector<string> > result;        vector<string> now;        if(s.size() == 0)            return result;        backtrack(s, 0, now, result);        return result;    }        void backtrack(string s, int idx, vector<string> &now, vector<vector<string> > &result)    {        int n = s.size();        if(idx == n)        {            result.push_back(now);            return;        }        for(int i=idx;i<n;i++)        {            if(isPalindrome(s, idx, i))            {                now.push_back(s.substr(idx, i-idx+1));                backtrack(s, i+1, now, result);                now.pop_back();                        }        }    }        bool isPalindrome(string s, int left, int right)    {        while(left <= right)        {            if(s[left++] != s[right--])                return false;        }        return true;    }};


0 0
原创粉丝点击