标签:
这道题采用动态规划的思想。参考了别人的做法。
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