📜  门|门 IT 2007 |问题 15(1)

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

门|门 IT 2007 问题 15

简介

这是 门|门 IT 2007的第15个问题,是一个典型的编程题目,需要用程序实现具体算法,求解问题的答案。

题目描述

给定一个字符串,由 '('')''['']''{''}' 六种符号组成,判断该字符串是否是合法的括号序列。要求左括号必须用相同类型的右括号闭合,左括号必须以正确的顺序闭合。

以下情况均认为是非法括号序列:

  • 括号不匹配,例如'[(])'
  • 左括号缺失,例如'[)]'
  • 右括号缺失,例如'()'

以下情况认为是合法括号序列:

  • 空字符串,例如''
  • 仅包含一种括号类型的字符串,例如'[]'
  • 包含多种括号类型的字符串,括号匹配且顺序正确,例如'()[]{}'
问题分析

这是一个经典的栈的应用问题。从左到右扫描字符串,如果当前字符是左括号,则将其入栈。如果当前字符是右括号,则弹出栈顶元素,如果栈顶元素不是同类型的左括号,或者栈为空,则该字符串非法。当字符串扫描完毕后,如果栈为空,则为合法的括号序列。

解法示例

以下是用 Python 实现该算法的示例代码:

def is_valid_parentheses(s: str) -> bool:
    hash_map = {')': '(', ']': '[', '}': '{'}
    stack = []
    for c in s:
        if c in hash_map:
            if not stack or stack.pop() != hash_map[c]:
                return False
        else:
            stack.append(c)
    return not stack
结论

该算法可以在线性时间复杂度内解决问题。

参考文献