返回

直击要领,掌握有效括号的精髓

前端

有效括号的精髓

计算机科学中,括号是广为应用的一种符号,它有助于将复杂的表达式分组,从而实现代码的可读性和可维护性。但使用括号时,需要遵循一定的规则,以确保括号的使用有效。

有效括号的规则:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

例如,字符串 "()" 和 "()[]" 是有效的,而字符串 ")(", "(()" 和 ")(" 是无效的。

LeetCode题解

LeetCode是一家受欢迎的在线代码题库,汇集了大量具有挑战性的算法题。其中,判断有效括号的问题是LeetCode题库中最经典的问题之一。

以下以LeetCode第20题为例,为您提供详细的解析:

题目
给定一个只包含 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

解析过程:

  1. 首先,我们需要理解题目的要求。本题要求判断给定的字符串是否有效,即满足括号使用规则。

  2. 根据有效括号的规则,我们可以发现,每种左括号都必须与对应类型的右括号一一对应,并且左括号必须以正确的顺序闭合。

  3. 接下来,我们可以使用栈数据结构来解决这个问题。栈是一种先进后出的数据结构,它可以帮助我们追踪括号出现的顺序。

  4. 具体实现步骤如下:

  • 遍历字符串中的每个字符。
  • 如果当前字符是左括号,则将它压入栈中。
  • 如果当前字符是右括号,则从栈中弹出最上面的字符并进行比较。
  • 如果弹出的字符与当前字符匹配,则说明括号是有效的。否则,则说明括号是无效的。
  1. 重复以上步骤,直到遍历完整个字符串。

  2. 如果栈为空,则说明所有括号都已匹配,字符串是有效的。否则,字符串是无效的。

代码实现:

def is_valid(s):
  """
  判断字符串是否有效。

  Args:
    s: 输入字符串,只包含 '(',')','{','}','[',']'。

  Returns:
    True if the string is valid, False otherwise.
  """

  # 创建一个栈。
  stack = []

  # 遍历字符串中的每个字符。
  for char in s:
    # 如果当前字符是左括号,则将它压入栈中。
    if char in "([{":
      stack.append(char)
    # 如果当前字符是右括号,则从栈中弹出最上面的字符并进行比较。
    elif char in ")]}":
      # 如果弹出的字符与当前字符匹配,则说明括号是有效的。
      if stack and char == {")": "(", "}": "{", "]": "["}[stack.pop()]:
        continue
      # 否则,则说明括号是无效的。
      else:
        return False

  # 如果栈为空,则说明所有括号都已匹配,字符串是有效的。
  return not stack

总结

通过本文的介绍,您应该已经掌握了判断有效括号的精髓,以及如何使用栈数据结构来解决LeetCode相关问题。如果您有兴趣进一步提升自己的算法技能,可以尝试LeetCode上的其他题目。祝您在算法的道路上不断进步,取得更大的成就!