[英]While checking if brackets are balanced, I am getting incorrect result (i.e., I know input string is balanced, but output is unbalanced)
我正在研究數據結構和算法。 我無法理解為什么在實現Stack並使用它檢查方括號是否平衡時為什么無法獲得所需的輸出(即輸入字符串是平衡的,但是我得到的字符串是不平衡的)。
class Stack(object):
def __init__(self):
self.items = []
def __str__(self):
return str(self.items)
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def isMatched(brackets):
opening = ('(', '[','{')
closing = (')', ']', '}')
stack = Stack()
for char in brackets:
if char in opening:
stack.push(char)
elif char in closing:
if stack.isEmpty or char != stack.pop():
#print('The brackets currently in the stack are: {}'.format(char), sep = ', ')
return False
elif char not in opening and closing:
raise ValueError('Unknown character {char}'.format(char=char))
if not stack.isEmpty():
return False
return True
string = "[]()"
print(string, "-", "Balanced" if isMatched(string) else "Unbalanced")
第一:
if stack.isEmpty or ...
stack.isEmpty
實際上始終為true。 您需要調用方法: stack.isEmpty()
。
第二:
elif char not in opening and closing:
and closing
部分實際上總是正確的,但是在這種情況下,它是無關緊要的,因為此時您已經知道char
不在closing
。 您應該省略and closing
完全and closing
。
第三:
... or char != stack.pop():
char
永遠不能等於stack.pop()
因為在這一點上您知道char
是一個stack.pop()
括號,而stack
僅包含stack.pop()
括號。 您需要一些邏輯來將每個右括號與其對應的右括號相關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.