在一个神秘的古老世界中,有一种特殊的宝箱,需要通过特殊的符号序列才能打开。这些宝箱都是由先祖们留下来的,包含了丰富的宝物。妮妮是一个勇敢的冒险家,她在一次探险中找到了这些神秘的宝箱,并发现了打开宝箱的规则:

  1. 空符号序列是有效的
  2. 如果A和B是有效的,那么AB也是有效的
  3. 如果A是有效的,那么'(A)'和'[A]'也是有效的。

现在,妮妮手上有一个符号序列,她想知道这些符号序列是否有效,也就是说,她是否可以用这些符号序列打开宝箱。你能帮助她吗?

输入格式

输入一个只包含字符'(', ')', '[', ']', '{', 和 '}' 的字符串,表示一个符号序列,长度不超过105。

输出格式

输出一行,如果相应的符号序列是有效的,输出'Y',否则输出'N'。

算法思路

您可以使用栈的数据结构来判断符号序列的有效性。具体步骤如下:

  1. 创建一个空栈。
  2. 遍历符号序列中的每个字符:
    • 如果字符是'('、'['或'{',将其压入栈中。
    • 如果字符是')'、']'或'}',检查栈顶的字符是否与当前字符匹配(即'('对应')','['对应']','{'对应'}')。若匹配,则将栈顶元素出栈;若不匹配,说明符号序列无效,直接返回'N'。
  3. 遍历结束后,检查栈是否为空。如果栈为空,则说明符号序列有效,返回'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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录