Palindrome Partitioning
这道题采用动态规划的思想。参考了别人的做法。其中二位数组buf代表字符串中任意一段是否是回文,比如字符串aba,buf[1][1]代表字符串b是不是回文,buf[0][1]代表字符串ab是不是回文,所以题目的关键是求解这个二维数组
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; } } } } } };