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"] ]
动规还TLE 我也是醉了!
class Solution { public: vector<vector<string>> partition(string s) { //dp解法 /*用来记录s[i]到s[j]是否为palindrome dp[i][j] 1、s[i]==s[j]&&j-i<2 2、s[i]==s[j]&&s[i+1]到s[j-1]为palindrome 所以事先要知道dp[i+1][j-1] i是s.length-- j从i++ */ const int n=s.size(); bool dp[n][n]; fill_n(&dp[0][0],n*n,false); for(int i=s.size()-1;i>=0;i--) for(int j=i;j<n;++j) if(s[i]==s[j]&&(j-i<2)||dp[i+1][j-1]) dp[i][j]=true; //开始根据dp[i][j]截取字符串 获得结果 vector<vector<string>> sub_palins[n]; for(int i=n-1;i>=0;i--) for(int j=i;j<n;++j) if(dp[i][j]) { const string palindrome=s.substr(i,j-i+1); if(j+1<n) for(auto v:sub_palins[j+1]) { v.insert(v.begin(),palindrome); sub_palins[i].push_back(v); } else{ sub_palins[i].push_back(vector<string>{palindrome}); } } return sub_palins[0]; } };