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"] ]
思路:先用dict[i][j]保存string的下标从i到j是否是回文。可用DFS方法求解。
class Solution { public: void partitionHelper(int start, int pos, vector<vector<bool> > &dict, vector<vector<string> >&res, vector<string>&perRes, string str) { if(start == str.length()) { if (!perRes.empty()) { res.push_back(perRes); } return; } int j; for(j=0; start+j<str.length(); ++j) { if(dict[start][start+j]) { perRes.resize(pos+1); string s(str.substr(start,j+1)); perRes[pos] = s; partitionHelper(start+j+1,pos+1,dict,res,perRes,str); } } } vector<vector<string> > partition(string s) { vector<vector<string> > res; res.clear(); if (s.empty()) { return res; } vector<vector<bool> > dict(s.length(), vector<bool>(s.length(),false)); int n = s.size(); int i,j,k1,k2; for(i=0; i<n; ++i) { dict[i][i] = true; for(j=i+1; j<n; ++j) { k1 = i, k2 = j; while(k1 < k2 && s[k1]==s[k2]) { k1++,k2--; } if (k1>=k2) { dict[i][j] = true; } } } vector<string> perRes; partitionHelper(0,0,dict,res,perRes,s); return res; } };