有人可以引导我分析这个问题的时间复杂度吗?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();
}
}
};
有人可以引导我分析这个问题的时间复杂度吗? https://leetcode.com/problems/palindrome-partitioning/我有如下使用DFS +回溯+ DP的解决方案,我...
isPalindrome()
的方法可以在O(n)
中求解。