簡體   English   中英

在檢查方括號是否平衡時,我得到的結果不正確(即,我知道輸入字符串是平衡的,但輸出是不平衡的)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM