Python中的括号问题解决最短时间和空间?

问题描述

我正在尝试解决 https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/bracket-sequence-1-40eab940/submissions/在python中

显示超时错误。谁能告诉我如何减少时间复杂度? 这是我的代码:

def findBalanced(expr):

    stack = []
    for char in expr:
        if char in ['(']:
            stack.append(char)
        else:
            if not stack:
                return False
            current_char = stack.pop()
            if current_char == '(':
                if char != ')':
                    return False
           

    if stack:
        return False
    return True

if __name__ == '__main__':
    expr = input()
    count = 0
    for x in range(len(expr)):
        expr = expr[1:] + expr[0]
        if findBalanced(expr):
            count +=1
        else:
            pass
    print(count)

如何用最少的时间和最少的空间解决这个问题?

解决方法

我建议在行首或print(stack)循环中添加行for。然后在一些示例输入上执行算法。您可能会发现有些奇怪。

请花一点时间实际执行此操作,然后尝试找出它的奇异之处。这将为您提供有关如何改进算法的灵感。

...

您这样做了吗?在完成之前,请不要继续阅读。

此答案的其余部分假定您在for循环的开始处添加了print(stack),并在一些输入示例中查看了输出,并且您尝试注意以下内容:输出有些令人惊讶。请先阅读该答案的其余部分。

您的算法会维护一个堆栈,但是如果您在每次迭代时都输出堆栈,则会发现一些问题:堆栈仅包含字符(的副本。没有其他的。这是因为stack.append(char)的唯一出现在if char in ['(']:的正下方,因此您只能附加(

因此,实际上,此堆栈中包含的唯一信息是它包含多少(。您不必维护堆栈,而只需维护一个计数器,它是一个整数,告诉您如果有堆栈,堆栈中将有多少(

stack = []替换为depth = 0,然后将stack.append(char)替换为depth += 1,将stack.pop()替换为depth -= 1

您的支票if current_char == '(':根本没有用,因为堆栈上的所有字符都是(,所以支票始终为真,因此是多余的。

我将让您确定应在计数器的哪些值上返回true,在哪些值上应返回false。祝你好运!

,
def solve(s):
    p=0
    t=0
    res = 0
    for i in s:
        if(i=='('):
           
            p+=1
           
        else:
          
            p -= 1
          
        if (p<t):
            print(f"Values of p and t are {p} and {t}")
            t=p
            res = 0
        if(t==p):

            res+=1
            
    if p:
        return 0
    else:
        return res
s= input()
print(solve(s))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...