【问题标题】:Balanced Symbol check using stack in Python在 Python 中使用堆栈进行平衡符号检查
【发布时间】:2018-04-23 04:12:21
【问题描述】:

我一直在尝试用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。这个输入似乎是平衡的,但返回的输出是假的。

【问题讨论】:

    标签: python stack


    【解决方案1】:

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

    谈到您的问题,我认为 ({[})] 并不真正平衡。从算法来看,它的工作方式如下。

    步骤 1. 将 ( 入栈

    第 2 步。选取下一个字符。它与堆栈顶部的项目相反吗?不。将 { 推入堆栈。堆栈:({

    第 3 步。选择下一个字符。它与堆栈顶部的项目相反吗?否。将 [ 推入堆栈。堆栈:({[

    第 4 步。选择下一个字符。它与堆栈顶部的项目相反吗?不。将 } 推入堆栈。

    第 5 步。以此类推,直到堆栈为 ({[})]

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

    【讨论】:

    • 出现这个问题的条件是括号的顺序一定要正确吗?
    • 我创建了一个类 Stack 并定义了该类中的所有堆栈函数。我正在将相同的内容导入我的程序。该程序运行良好,只有第三个输入错误。但我想可能是我们需要把括号的顺序按正确的顺序排列!
    • @ShreyaSrivastava,平衡的条件应该是顺序很重要。否则,解决方案变得相当简单,即计算 { 的数量和 } 的数量。如果计数相等,则输入是平衡的。
    • 好的..谢谢你的帮助:)
    猜你喜欢
    • 2016-09-06
    • 2017-06-10
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2021-11-30
    • 2020-08-09
    相关资源
    最近更新 更多