【问题标题】:Write a program that uses a Stack to check parentheses (balanced and correct nesting)编写一个使用堆栈检查括号的程序(平衡且正确的嵌套)
【发布时间】:2022-01-07 23:09:54
【问题描述】:

括号是:()、[] 和 {}。我是初学者,所以对这一切还很陌生。

print(check_parentheses("()"))
print(check_parentheses("(()())"))
print(not check_parentheses("(()))"))  # Unbalanced
print(not check_parentheses("((())"))  # Unbalanced
print(check_parentheses("({})")) #fick fel här
print(not check_parentheses("({)}"))  # Bad nesting
print(check_parentheses("({} [()] ({}))"))
print(not check_parentheses("({} [() ({)})"))  # Unbalanced and bad nesting

所有这些都应该打印 True。

到目前为止,我所做的只是编写一堆 if 语句,例如,如果字符是 == "(" 那么 number_of_left_parentheses += 1。

我确实意识到这是次优的,因为它迫使我为所有 6 个可能的括号编写一个 if-elif 语句,这使我的代码比它必须的要长。

谁能帮我用 Stacks 解决这个问题?

【问题讨论】:

  • 当你看到一个打开的“括号”时,然后将它推入堆栈。当您看到关闭的“括号”时,弹出堆栈。如果弹出的元素不是相应的开始“括号”,则存在不匹配。当输入结束并且堆栈不为空时,存在不匹配。

标签: python stack


【解决方案1】:

堆栈是一种简单的数据结构,您可以在其中以后进先出的方式添加或删除元素。将堆栈想象成一堆盘子。您可以随时在顶部添加另一个盘子,或移除顶部盘子。

有几种方法可以在 python 中实现堆栈。例如,列表可以用作堆栈。检查documentation for lists,特别是有两个方法.append(x) 和.pop()。 Append 将 x 项添加到列表末尾,pop 删除最后一项。

在这种情况下,您将使用堆栈来跟踪开括号,并实现逻辑来处理开括号和闭括号的不同情况。

【讨论】:

  • 除了 print(not check_parentheses("({)}")) 之外,我已经成功地将所有内容都设为 True 。 def check_parentheses(string): open_parentheses = "{([" closed_pa​​rentheses = "})]" stack1 = Stack() for char in string: if char in open_parentheses: stack1.push(char) for char in string: if char in closed_pa​​rentheses和 stack1.get_size() > 0: stack1.pop() elif char in closed_pa​​rentheses and stack1.get_size() == 0: return False if(stack1.is_empty()): return True else: return False
  • 不错!我认为您需要考虑删除的右括号是否与堆栈顶部匹配。即,您需要检查从 stack1.pop() 返回的括号是否匹配 char
猜你喜欢
  • 2016-06-26
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2019-01-12
  • 1970-01-01
  • 2021-11-30
  • 2022-01-02
相关资源
最近更新 更多