使用Python中的堆栈进行平衡符号检查

时间:2017-11-10 01:05:20

标签: python stack

我一直在尝试使用python

来做一个平衡的符号问题
import Stack from Stack 
def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol in "([{":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                top = s.pop()
                if not matches(top,symbol):
                   balanced = False
        index = index + 1
    if balanced and s.isEmpty():
        return True
    else:
        return False

def matches(open,close):
    opens = "([{"
    closers = ")]}"
    return opens.index(open) == closers.index(close)


print(parChecker('{{([][])}()}'))
print(parChecker('[{()]'))
print (parChecker('({[})]')     # --- THis is balanced but returns false

但是这会返回false输入([{}}]。此输入似乎是平衡的,但返回的输出是错误的。

1 个答案:

答案 0 :(得分:0)

首先,最顶层的import语句的语法看起来不正确。其次,从哪个包导入Stack类?

提出你的问题,我认为({[}}]并不是真正平衡的。从算法来看,它的工作方式如下。

步骤1.推(到堆栈

步骤2.选择下一个角色。它是否与堆栈顶部的项目相反?不。推{到堆栈。堆栈:({

步骤3.选择下一个角色。它是否与堆栈顶部的项目相反? No.Push [到堆栈。堆栈:({[

步骤4.选择下一个角色。它是否与堆栈顶部的项目相反?不。推送}到堆栈。

步骤5.依此类推,直到堆栈为({[}}]

相反,如果输入为({[]}),则在步骤4之后,堆栈将会是({since]将从堆栈中弹出。在步骤5之后,它将是(,之后)第6步,它将是空的。