【问题标题】:Using stack class to checks whether brackets ( "(", ")", "<", ">" ) are balanced - python使用堆栈类检查括号(“(”,“)”,“<”,“>”)是否平衡 - python
【发布时间】:2017-06-10 01:47:15
【问题描述】:

我有这段代码来检查括号是否在字符串中的一段文本中平衡。

def balanced_brackets(text):

    s = Stack()

    for character in text:
        if character == "(":
            s.push(character)
        elif character == ")":
            if s.is_empty():
                return False
            else:  
                s.pop()
        if character == "<":
            s.push(character)
        elif character == ">":
            if s.is_empty():
                return False
            else:
                s.pop()

    if s.is_empty():
        return True
    else:
        return False

对于以下测试:

print(balanced_brackets('(<x)>(())()'))
print(balanced_brackets('x<y)(>z'))
print(balanced_brackets('<(x)<y>)z'))

以下输出应全部打印

False 

但他们会打印

True 

出于某种原因。我需要帮助来确定这是为什么。谢谢。

【问题讨论】:

  • 你还没有检查你的闭门器是否真的匹配你弹出的开瓶器。
  • 我如何检查开瓶器是否在堆栈中。
  • 我尝试在 s 中使用 elif "(" 和在 s 中使用 elif "

标签: python python-3.x stack


【解决方案1】:

我可能会这样做,使用字典来映射哪个右括号属于哪个左括号。这样,您可以将代码简化为只有一个 if/elif 块,而不是每个括号类型一个。您也可以轻松地向字典中添加更多括号。

# Map Closing to Opening
BRACKETS = {
    ')' : '(',
    '>' : '<'
}

def balanced_brackets(text):
    s = Stack()
    for c in text:
        # if opening bracket
        if c in BRACKETS.values():
            s.push(c)
        # if closing bracket
        elif c in BRACKETS:
            if s.is_empty():
                return False
            # if opening bracket doesn't match closing bracket popped from Stack
            elif BRACKETS[c] != s.pop():
                return False

    return s.is_empty()

# Output
>>> balanced_brackets('(<x)>(())()')
False
>>> balanced_brackets('x<y)(>z')
False
>>> balanced_brackets('<(x)<y>)z')
False
>>> balanced_brackets('<((<<hello>>))>')
True
>>> balanced_brackets('<')
False

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2018-04-23
    • 2019-11-01
    • 2022-01-02
    • 2014-04-11
    相关资源
    最近更新 更多