【问题标题】:What's the Time Complexity and Space Complexity this function to check valid parenthesis?这个检查有效括号的函数的时间复杂度和空间复杂度是多少?
【发布时间】:2021-07-03 14:23:46
【问题描述】:

我无法找到代码的时间复杂度和空间复杂度来检查有效括号。有人可以帮忙吗?

代码-

bool isValid(string s) 
{
        int s_size = s.length();
        for (int i = 0; i < s_size-1;i++)
        {
            if((s[i]=='(' && s[i+1]==')') || (s[i]=='[' && s[i+1]==']')|| (s[i]=='{' && s[i+1]=='}'))
            {
                s.erase(i, 2);
                i=-1;
                s_size-=2;
            }

        }
        if(s.empty())
            return true;
        else 
            return false;
                
    }

我认为空间复杂度是O(1),时间复杂度是O(n)。如果我错了,请纠正我。

【问题讨论】:

标签: c++ algorithm time-complexity space-complexity


【解决方案1】:

仅对于您上面发布的代码 sn-p,时间复杂度为 O(n3)。

正如n. 'pronouns' m. 正确指出的那样,外部for 循环for (int i = 0; i &lt; s_size-1;i++) 运行n2 次,因为每次找到匹配项时i 都会重置到起点。 s.erase() 函数也需要 O(n) 时间来运行。总共弥补了三次 O(n3) 时间复杂度。

你可以阅读std::string.erase()函数here

您对空间复杂性的看法是正确的。它的 O(1)。

为了有效地解决上述有效括号问题,即在O(n)时间复杂度和O(n)空间复杂度内,考虑使用堆栈。

【讨论】:

  • 实际上外循环需要 O(n^2),因为每次找到匹配项时循环变量都会重置。
  • @n.'pronouns'm。啊!我现在明白了。但我认为这是一个错字。他imo打算写i-=1
  • @n.'pronouns'm。好的,我现在明白了。我将立即编辑我的答案
  • 不用等,我想如果你这样改变它可以正常工作。不过需要测试。
猜你喜欢
  • 2020-12-03
  • 2017-09-11
  • 2020-05-03
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
相关资源
最近更新 更多