Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [     ["aa","b"],     ["a","a","b"]   ] 
递归求解所有划分可能~

 1 class Solution {
 2 public:
 3     vector< vector<string> > ans;
 4     
 5     bool IsPalindrome(string s, int start, int end){
 6         if(start==end)
 7             return true;
 8         int i=start, j=end;
 9         while(i<j){
10             if(s[i]!=s[j])
11                 return false;
12             i++;
13             j--;
14         }
15         return true;
16     }
17     void recursivePar(string s, int start, vector<string> par){
18          
19         if(start == s.length()){
20             ans.push_back(par);
21             return ;
22         }
23         for(int i=start; i<s.length(); i++){
24             if(IsPalindrome(s, start, i)){
25                 par.push_back(s.substr(start, i-start+1));
26                 recursivePar(s, i+1, par);
27                 par.pop_back();
28             }
29         }
30             
31         
32     }
33     vector<vector<string>> partition(string s) {
34         // Start typing your C/C++ solution below
35         // DO NOT write int main() function
36         vector<string> par;
37         par.clear();
38         ans.clear();
39         recursivePar(s, 0, par);
40         return ans;
41     }
42 };