Skip to content

09198:括号画家

http://cs101.openjudge.cn/practice/09198/

Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的: (1) 空的括号序列是美观的; (2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的; (3) 若括号序列A、B都是美观的,则括号序列AB也是美观的; 例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。 现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?

输入

一个括号序列,长度不超过10000。

输出

如果它是美观的,输出Yes,否则输出No。

样例输入

{}[(){}]()

样例输出

Yes
python
def is_beautiful_brackets(sequence):
    stack = []
    # 对应关系字典,键为右括号,值为对应的左括号
    bracket_pairs = {')': '(', ']': '[', '}': '{'}
    
    for bracket in sequence:
        if bracket in bracket_pairs.values():
            # 若是左括号,压入栈中
            stack.append(bracket)
        elif bracket in bracket_pairs:
            # 若是右括号,检查栈顶元素是否匹配
            if stack and stack[-1] == bracket_pairs[bracket]:
                stack.pop()
            else:
                return "No"
        else:
            # 输入不合法的字符时,直接返回No
            return "No"
    # 栈为空表示括号序列美观
    return "Yes" if not stack else "No"

# 输入处理
sequence = input().strip()

# 输出结果
print(is_beautiful_brackets(sequence))