【问题标题】:Nested Brackets in Python using stackPython中使用堆栈的嵌套括号
【发布时间】:2021-10-06 16:03:24
【问题描述】:

如果没有嵌套则返回 0 嵌套返回 1

我不知道下面的代码有什么问题。即使对于不平衡的括号,它也会返回 1。

#from codility
def solution (S):
    B =[]
    
    if len(S) == 0:
        return 1
    for i in range (0,len(S)):
        if S[i] == "(" or S[i] == "[" or S[i] == "{":
            B.append(S[i])
        else: 
            return 0
        if (S[i] == ")" and B[-1]!= "(") :
            return 0
        if (S[i] == "}" and B[-1]!= "{") :
            return 0
        if (S[i] == "]" and B[-1]!= "[") :
            return 0
        else:
            B.pop()

        if len(B)==0:   
            return 1

【问题讨论】:

  • 这段代码根本无法运行,elif: 是语法错误。
  • 向您的编辑器添加一个静态 linter,例如 flake8 以捕获此类问题!
  • @mkrieger1 抱歉,应该是别的。
  • 您的问题是什么?是检查嵌套括号还是不平衡括号?
  • 平衡且不嵌套返回什么?

标签: python python-3.x stack


【解决方案1】:

定义解(S): B =[]

if len(S) == 0:
    return 1
for i in range (0,len(S)):
    if S[i] == "(" or S[i] == "[" or S[i] == "{":
        B.append(S[i])
    else: 
        return 0
    if (S[i] == ")" and B[-1]!= "(") :
        return 0
    if (S[i] == "}" and B[-1]!= "{") :
        return 0
    if (S[i] == "]" and B[-1]!= "[") :
        return 0
    else:
        B.pop()
if len(B)==0:   
        return 1

这是导致问题的原因,因为 B 的初始长度为 0,因此循环从 i=0 len(B) == 0 开始并返回 1。

尝试将其置于循环之外。

【讨论】:

  • 不,这也不起作用。对于正确嵌套的括号,我得到了错误的答案。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多