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。
样例输入
{}[(){}]()样例输出
Yespython
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))