【发布时间】:2020-03-17 12:14:14
【问题描述】:
谁能帮我分析一下这个问题的时间复杂度? https://leetcode.com/problems/palindrome-partitioning/
我有一个使用 DFS + 回溯 + DP 的解决方案,如下所示,我想就时间复杂度而言,它归结为麦芽汁情况下您可以拥有的分区数量,但很难弄清楚它是什么。
class Solution {
public:
vector<string> cur;
vector<vector<string>> ans;
vector<vector<bool>> isPalindrome;
unordered_map<int,vector<int>> pairs;
vector<vector<string>> partition(string s) {
isPalindrome.resize(s.length(),vector<bool>(s.length(),false));
buildPalindromePairs(s);
backtracking(s,0);
return ans;
}
void buildPalindromePairs(string s)
{
for(int i=0;i<s.length();++i)
{
for(int j=i;j>=0;j--)
{
if(i==j)
isPalindrome[j][i]=true;
else if(j==i-1 && s[j]==s[i])
isPalindrome[j][i]=true;
else if(s[j]==s[i] && isPalindrome[j+1][i-1])
isPalindrome[j][i]=true;
if(isPalindrome[j][i])
pairs[j].push_back(i);
}
}
}
void backtracking(string s, int start)
{
if(start==s.length())
{
ans.push_back(cur);
return;
}
for(auto end:pairs[start])
{
cur.push_back(s.substr(start, end-start+1));
backtracking(s,end+1);
cur.pop_back();
}
}
};
【问题讨论】:
标签: time-complexity