📜  门|门CS 2011 |问题2(1)

📅  最后修改于: 2023-12-03 15:28:49.001000             🧑  作者: Mango

门|门CS 2011 |问题2

简介

本题为门|门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"