神秘宝箱:符号序列验证算法 - 帮助妮妮打开宝箱
在一个神秘的古老世界中,有一种特殊的宝箱,需要通过特殊的符号序列才能打开。这些宝箱都是由先祖们留下来的,包含了丰富的宝物。妮妮是一个勇敢的冒险家,她在一次探险中找到了这些神秘的宝箱,并发现了打开宝箱的规则:
- 空符号序列是有效的
- 如果A和B是有效的,那么AB也是有效的
- 如果A是有效的,那么'(A)'和'[A]'也是有效的。
现在,妮妮手上有一个符号序列,她想知道这些符号序列是否有效,也就是说,她是否可以用这些符号序列打开宝箱。你能帮助她吗?
输入格式
输入一个只包含字符'(', ')', '[', ']', '{', 和 '}' 的字符串,表示一个符号序列,长度不超过105。
输出格式
输出一行,如果相应的符号序列是有效的,输出'Y',否则输出'N'。
算法思路
您可以使用栈的数据结构来判断符号序列的有效性。具体步骤如下:
- 创建一个空栈。
- 遍历符号序列中的每个字符:
- 如果字符是'('、'['或'{',将其压入栈中。
- 如果字符是')'、']'或'}',检查栈顶的字符是否与当前字符匹配(即'('对应')','['对应']','{'对应'}')。若匹配,则将栈顶元素出栈;若不匹配,说明符号序列无效,直接返回'N'。
- 遍历结束后,检查栈是否为空。如果栈为空,则说明符号序列有效,返回'Y';否则,返回'N'。
Python 代码示例
def is_valid_symbol_sequence(s):
stack = []
for c in s:
if c in '([{':
stack.append(c)
elif c in ')]}':
if len(stack) == 0 or not is_matching(stack[-1], c):
return 'N'
stack.pop()
return 'Y' if len(stack) == 0 else 'N'
def is_matching(left, right):
return (left == '(' and right == ')') or \
(left == '[' and right == ']') or \
(left == '{' and right == '}')
symbol_sequence = input('请输入符号序列:')
result = is_valid_symbol_sequence(symbol_sequence)
print(result)
示例输入1:
{[()]}
示例输出1:
Y
示例输入2:
{{[}]})
示例输出2:
N
希望对您有帮助!
原文地址: https://www.cveoy.top/t/topic/bOLS 著作权归作者所有。请勿转载和采集!