返回

「前端刷题」20. 有效的括号:开启你的括号校验之旅

前端

有效括号的校验规则

  • 左括号必须用相同类型的右括号闭合。
  • 左括号和右括号必须一一对应,不能出现未闭合或多余的括号。
  • 不同类型的括号不能互相闭合,例如:左括号不能用右大括号闭合。

算法题解

  1. 栈数据结构:

    • 使用栈来存储左括号,当遇到右括号时,从栈中弹出左括号并进行配对。
    • 如果栈为空,则说明右括号没有与之匹配的左括号,字符串无效。
    • 如果栈中还有未配对的左括号,则说明字符串无效。
  2. 双指针法:

    • 使用两个指针来遍历字符串,一个指针指向左括号,另一个指针指向右括号。
    • 当遇到左括号时,将指针移动到下一个右括号处。
    • 当遇到右括号时,将指针移动到上一个左括号处。
    • 如果指针相遇或越界,则字符串无效。
  3. 递归法:

    • 将字符串拆分为左右两个子字符串,分别判断子字符串是否有效。
    • 如果两个子字符串都有效,则整个字符串有效。
    • 如果有一个子字符串无效,则整个字符串无效。

示例代码

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

  Args:
    s: 括号字符串

  Returns:
    布尔值,表示字符串是否有效
  """

  # 使用栈来存储左括号
  stack = []

  # 遍历字符串
  for char in s:
    # 如果是左括号,则入栈
    if char in "([{":
      stack.append(char)
    # 如果是右括号,则出栈并进行配对
    elif char in ")]}":
      if not stack:
        return False
      left = stack.pop()
      if (char == ')' and left != '(') or \
         (char == ']' and left != '[') or \
         (char == '}' and left != '{'):
        return False

  # 如果栈为空,则字符串有效
  return not stack

总结

有效括号的校验是编程面试中常见的一道算法题,需要掌握栈、双指针法或递归法等算法来解决。通过本文的讲解和示例代码,希望你能够深入理解有效括号的校验规则和算法实现,从而在面试或算法竞赛中轻松应对这类题目。