「回溯法」Palindrome Partitioning

来源:互联网 发布:全球鹰与翔龙数据对比 编辑:程序博客网 时间:2024/06/07 19:20
/*************************************************************************> File Name: PalindromePartitioning.cpp> Author: Shaojie Kang> Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月16日 星期三 16时46分38秒     > Problem:        Given a string s, partition s such that every substring of the partition is a palindrome.        Return all possible palindrome partitioning of s.    Have you met this question in a real interview? Yes    Example    given s = "aab",    Return  [      ["aa","b"],      ["a","a","b"]  ] ************************************************************************/#include<iostream>#include<vector>#include<string>using namespace std;class Solution {public:    bool isPalindrome(const string &str)    {        if(str.empty()) return true;        int size = str.size();        for(int i = 0, j = size-1; i < j; ++i, --j)        {            if(str[i] != str[j]) return false;        }        return true;    }    vector<vector<string> > partition(string s)    {        vector<vector<string> >result;        vector<string> oneResult;        partitionCore(s, 0, result, oneResult);        return result;    }    void partitionCore(string &s, int start, vector<vector<string> > &result, vector<string> oneResult)    {        int size = s.size();        if(start == size)        {            result.push_back(oneResult);            return;        }        for(int i = start; i < size; ++i)        {            string strTemp(s.substr(start, i-start+1));            if(isPalindrome(strTemp))            {                oneResult.push_back(strTemp);                partitionCore(s, i+1, result, oneResult);                oneResult.pop_back();            }        }    }};void print(const vector<vector<string> > &result){    for(int i = 0; i < result.size(); ++i)    {        for(int j = 0; j < result[i].size(); ++j)        {            cout<<result[i][j]<<" ";        }        cout<<endl;    }}int main(){    string str("aab");    Solution sol;    vector<vector<string> > result = sol.partition(str);    print(result);    return 0;}

0 0
原创粉丝点击