返回

从初学者到高手:轻松理解 LeetCode20.有效的括号算法

前端

前言

在编程面试和算法竞赛中,LeetCode 是一个非常受欢迎的平台。LeetCode20.有效的括号是 LeetCode 上一道经典的算法题,也是面试中经常被问到的问题。这道题考察了程序员对数据结构和算法的基本功,以及对编程语言的熟练程度。

算法思想

LeetCode20.有效的括号算法的思想非常简单,它使用了一个栈数据结构来存储左括号。当遇到一个左括号时,把它压入栈中;当遇到一个右括号时,从栈中弹出栈顶元素,并与右括号进行比较。如果栈顶元素和右括号匹配,则表示括号有效;否则,表示括号无效。

算法实现

LeetCode20.有效的括号算法的实现也非常简单。可以使用任何一种编程语言来实现,这里我们使用 Python 来实现。

def is_valid(s):
  """
  判断括号是否有效。

  Args:
    s: 输入字符串,包含左括号和右括号。

  Returns:
    True 如果括号有效,否则返回 False。
  """

  stack = []
  for char in s:
    if char in "([{":
      stack.append(char)
    elif char in ")]}":
      if not stack:
        return False
      top = stack.pop()
      if (top == "(" and char != ")") or (top == "[" and char != "]") or (top == "{" and char != "}"):
        return False

  return not stack

算法优化

LeetCode20.有效的括号算法的优化主要集中在空间复杂度上。栈数据结构的空间复杂度是 O(n),其中 n 是输入字符串的长度。如果输入字符串很长,则栈数据结构可能会占用大量的内存空间。为了优化空间复杂度,我们可以使用一个哈希表来存储左括号和右括号的匹配关系。这样,栈数据结构的空间复杂度就可以降到 O(1)。

代码示例

以下是一个使用哈希表优化的 LeetCode20.有效的括号算法的 Python 实现:

def is_valid(s):
  """
  判断括号是否有效。

  Args:
    s: 输入字符串,包含左括号和右括号。

  Returns:
    True 如果括号有效,否则返回 False。
  """

  mapping = {")": "(", "}": "{", "]": "["}
  stack = []
  for char in s:
    if char in mapping:
      top = stack.pop() if stack else "#"
      if mapping[char] != top:
        return False
    else:
      stack.append(char)

  return not stack

总结

LeetCode20.有效的括号算法是一道经典的算法题,也是面试中经常被问到的问题。这道题考察了程序员对数据结构和算法的基本功,以及对编程语言的熟练程度。本文从初学者到高手的角度,深入浅出地讲解了 LeetCode20.有效的括号算法,从基本概念到实现细节,从算法优化到代码示例,希望对读者有所帮助。