标签:
这道题采用动态规划的思想。参考了别人的做法。
class Solution{ public: vector<vector<string>> result; vector<vector<string>> partition(string s) { int len = s.length(); vector<string> soloresult; if(s.length() == 0) return result; vector<vector<int>> buf(len, vector<int>(len)); dp(s,buf); ds(s,buf,0,soloresult);; return result; } void ds(const string &s,vector<vector<int>>& buf,int index,vector<string>& soloresult) { for(int i=index ; i<s.length();i++) { if(buf[index][i] == 1) { soloresult.push_back(s.substr(index,i-index +1)); if(i == s.length()-1) { result.push_back(soloresult); } else { ds(s,buf,i+1,soloresult); } soloresult.pop_back(); } } } void dp(const string& s,vector<vector<int>>& buf) { for(int i=s.length()-1; i>=0;i--) for(int j=i; j<s.length();j++) { if(i == j) { buf[i][j] =1; } else { if(s[i] == s[j]) { if(i+1 >= j-1 || buf[i+1][j-1] == 1) { buf[i][j] = 1; } } } } } };
标签:
原文地址:http://www.cnblogs.com/xgcode/p/4394386.html