📜  门|门 IT 2008 |问题 20(1)

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

门|门 IT 2008 |问题 20

介绍

该问题是一个经典的程序员面试题目,涉及到许多重要的概念和算法。问题描述如下:

给定一个字符串,包含多个括号(包括圆括号 (),方括号 [],和大括号 {}),判断这些括号是否匹配,也就是说是否每个左括号都有对应的右括号。

思路

我们可以考虑使用栈这种数据结构来解决这个问题。具体来说,我们遍历字符串,当我们遇到一个左括号时,我们将它压入栈中。当我们遇到一个右括号时,我们从栈中取出一个元素。如果这个元素是相应类型的左括号,则说明这个右括号和它对应的左括号匹配,可以继续处理下一个字符。如果这个元素不是相应类型的左括号,则说明这个右括号没有和它对应的左括号匹配,字符串就不符合要求。

代码
def is_valid(s: str) -> bool:
    stack = []
    mapping = {')': '(', ']': '[', '}': '{'}
    for char in s:
        if char in mapping:
            top_element = stack.pop() if stack else '#'
            if mapping[char] != top_element:
                return False
        else:
            stack.append(char)
    return not stack

以上是一个用Python实现的解法,时间复杂度为O(n),空间复杂度也为O(n)。我们可以在其中添加一些注释,以便读者更好地理解。

结论

该问题涉及到真实的面试题目,是程序员必须要掌握的算法之一。本文提供了一种基于栈的解法,并对具体思路做了详细的介绍和代码实现。同时,我们也提供了Markdown格式的输出,以便读者能够更好地阅读和使用。