【问题标题】:What is the time complexity of this LC problem这个 LC 问题的时间复杂度是多少
【发布时间】: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


    【解决方案1】:

    方法isPalindrome()可以在O(n)解决。

    buildPalindromePairs(string s) 方法是 O(n^2),因为在嵌套的 for 循环中。

    void backtracking(string s, int start) 方法是 O(2^(n - 1)),因为每个字符都可以选择或不选择。所以每个角色都有2个选项。因此n 字符可以呈现2^n 选项,理想情况下(2^(n-1)) 因为理想情况下必须有一个字符。

    总体复杂度为O(2^n)

    【讨论】:

    • 我认为void backtracking(...) 的复杂度不是 O(2^(n-1))。这是字符串中所有字符可以拥有的子集的数量,这不是我们所追求的。我们在这里尝试做的是对字符串进行分区的不同方式。
    • @DevDev 不,是一样的。首先添加它,然后调用回溯,然后再次将其弹出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2015-06-17
    • 2017-09-11
    • 2015-06-12
    • 2021-02-25
    相关资源
    最近更新 更多