📜  门|门 IT 2007 |第 69 题(1)

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

门|门 IT 2007 |第 69 题

这是门|门 IT 2007 年的第 69 题,是一道经典的编程题目。它可以帮助程序员提高自己的编程能力和算法思维,同时也挑战着程序员的耐心和坚韧性。

题目描述

你有一个字符串,其中包含若干个括号,包括圆括号 ()、方括号 [] 和大括号 {}。现在,你需要编写一个函数,判断这些括号是否是合法的,即它们是否满足以下条件:

  1. 括号必须以正确的顺序出现;
  2. 括号必须完全闭合。

例如,字符串 ()[]{} 是合法的,而字符串 ([)] 则是不合法的。

具体来说,你需要完成以下任务:

  1. 实现一个函数 bool is_valid(string s),其中 s 是一个只包含括号的字符串,函数返回一个布尔值,表示这些括号是否是合法的;
  2. 在实现过程中,你可以利用栈数据结构来处理括号的匹配;
  3. 函数的时间复杂度应该是 $O(n)$,其中 $n$ 是字符串的长度。
示例代码

下面是一个示例的 Python 实现:

def is_valid(s: str) -> bool:
    stack = []
    match = {')': '(', ']': '[', '}': '{'}
    for ch in s:
        if ch in match:
            if not stack or stack.pop() != match[ch]:
                return False
        else:
            stack.append(ch)
    return not stack

这段代码实现了一个使用栈数据结构的算法来判断括号是否合法。具体来说,我们遍历字符串的每一个字符,对于每一个右括号,如果栈为空或者栈顶元素不等于对应的左括号,则说明括号不合法;否则,我们从栈中弹出栈顶元素,继续遍历。对于每一个左括号,我们将其压入栈中,等待右括号的出现。最终,如果栈为空,则说明所有的括号都已经匹配完毕,括号是合法的;否则,括号是不合法的。

总结

算法和数据结构是计算机科学的核心内容之一,可以帮助我们高效地解决实际问题。编程题目是锻炼自己编程能力和算法思维的绝佳途径。通过挑战这些题目,我们可以提高自己的编程技能,锻炼自己的耐心和坚韧性,同时也可以对计算机科学的核心内容有更深入的理解。