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;
}
}
}
}
}
};
浙公网安备 33010602011771号