我一直在尝试使用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输入([{}}]。此输入似乎是平衡的,但返回的输出是错误的。
答案 0 :(得分:0)
首先,最顶层的import语句的语法看起来不正确。其次,从哪个包导入Stack类?
提出你的问题,我认为({[}}]并不是真正平衡的。从算法来看,它的工作方式如下。
步骤1.推(到堆栈
步骤2.选择下一个角色。它是否与堆栈顶部的项目相反?不。推{到堆栈。堆栈:({
步骤3.选择下一个角色。它是否与堆栈顶部的项目相反? No.Push [到堆栈。堆栈:({[
步骤4.选择下一个角色。它是否与堆栈顶部的项目相反?不。推送}到堆栈。
步骤5.依此类推,直到堆栈为({[}}]
相反,如果输入为({[]}),则在步骤4之后,堆栈将会是({since]将从堆栈中弹出。在步骤5之后,它将是(,之后)第6步,它将是空的。