📜  门|门CS 2008 |第 53 题(1)

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

门|门CS 2008 第 53 题

这是一道经典的数据结构题目,涉及栈的基本操作和算法。

问题描述

给定一个只包含 '(',')','{','}','[',']' 六种字符的字符串,判断该字符串是否合法。若字符串中所有左括号都有相应的右括号,则视为合法字符串,否则不合法。

解题思路

本题可以使用栈来解决。具体思路如下:

  1. 初始化一个空栈。

  2. 从左到右遍历字符串中的字符。如果当前字符是左括号,则将其压入栈中。

  3. 如果当前字符是右括号,则弹出栈顶字符,并判断是否与当前字符匹配。如果不匹配,返回 false。

  4. 如果遍历完整个字符串后,栈不为空,则返回 false。

  5. 否则,返回 true。

代码实现

下面是 Python 实现该算法的代码片段:

def isValid(s: str) -> bool:
    stack = []
    for char in s:
        if char in ['(', '[', '{']:
            stack.append(char)
        else:
            if not stack:  # 栈为空
                return False
            top_char = stack.pop()
            if char == ')' and top_char != '(':
                return False
            elif char == ']' and top_char != '[':
                return False
            elif char == '}' and top_char != '{':
                return False
    return not stack  # 栈为空则返回 True,否则返回 False
总结

本题使用了栈这种经典的数据结构,并且代码的实现比较简单易懂。掌握了栈的基本操作之后,对于这种字符串匹配问题,使用栈是比较容易解决的。