📅  最后修改于: 2023-12-03 15:28:49.001000             🧑  作者: Mango
本题为门|门CS 2011的第二题,需要程序员完成一个基于栈的算法,实现给出的操作序列,判断最后栈中是否存在匹配的括号对。
现在有一个由小括号()
、中括号[]
和大括号{}
组成的字符串。你需要设计一个程序,从左到右读取字符串中的每个字符,对于每个左括号,将其压入栈中;对于每个右括号,弹出栈顶元素,并判断其是否与当前括号匹配。如果匹配,继续读入下一个字符;否则,直接输出 "no"
,并结束程序。
如果最后栈中还有元素,也需要输出 "no"
。
以下是一些输入输出的示例:
输入:
(())
输出:
yes
输入:
([)]
输出:
no
以下是核心代码的示例:
stack = []
for c in s:
if c in ['(', '[', '{']:
# 左括号入栈
stack.append(c)
else:
# 右括号出栈并匹配
if not stack:
print("no")
break
top = stack.pop()
if top == '(' and c == ')' or top == '[' and c == ']' or top == '{' and c == '}':
continue
else:
print("no")
break
else:
# 字符串遍历完成,判断栈是否为空
if not stack:
print("yes")
else:
print("no")
以上是使用Python语言实现该算法的核心代码,其中stack
是一个列表,用于模拟栈。程序先遍历字符串中的每一个字符,如果是左括号则将其入栈,如果是右括号则弹出栈顶元素并判断是否匹配。如果栈已经空了而字符串还未遍历完成,则输出"no"
并结束程序。如果字符串遍历完成后栈中仍有元素,则输出"no"
;否则输出"yes"
。