Palindrome Partitioning
DP + 回溯
vector<vector<string>> partition(string s) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<vector<string>> res;
if(s.empty())
return res;
int n = s.size();
vector<vector<bool>> isPalin(n,vector<bool>(n,false));
int i,j;
for(i=0;i<n;i++)
isPalin[i][i] = true;
for(i=0;i<n-1;i++)
isPalin[i][i+1] = (s[i]==s[i+1]?true:false);
for(int len=3;len<=n;len++)
{
for(int i=0;i<n-len+1;i++)
{
j = i+len-1;
isPalin[i][j] = (s[i]==s[j]?isPalin[i+1][j-1]:false);
}
}
vector<string> path;
dfs(0,s,isPalin,path,res);
return res;
}
void dfs(int pos,string& s,vector<vector<bool>>& isPalin,vector<string>& path,vector<vector<string>>& res)
{
if(pos==s.size())
{
res.push_back(path);
return;
}
for(int i=pos;i<s.size();i++)
{
if(isPalin[pos][i])
{
path.push_back(s.substr(pos,i-pos+1));
dfs(i+1,s,isPalin,path,res);
path.pop_back();
}
}
}
浙公网安备 33010602011771号