返回

括号检查:理解不同括号类型在字符串中的有效性

前端

在编程的世界里,括号扮演着至关重要的角色。它们被广泛用于代码块的界定、函数的参数传递、数组元素的访问等场景。括号的使用不仅能使代码结构清晰明了,还能帮助程序员避免语法错误。然而,括号的滥用也会导致代码的可读性和可维护性降低。因此,学习和掌握括号的有效性检查是编程人员必备的基本功之一。

括号有效性概述

括号有效性是指在给定字符串中,不同类型的括号是否正确配对。括号类型主要包括圆括号 ()、方括号 []、花括号 {}。有效括号字符串应满足以下条件:

  • 每个左括号必须有一个相同类型的右括号与之配对,反之亦然。
  • 括号必须以正确的顺序闭合。例如,([{}]) 是有效的,而 ([}]) 是无效的。
  • 空字符串可被认为是有效的括号字符串。

栈数据结构与括号有效性检查

栈是一种重要的数据结构,它遵循“后进先出”(Last-In-First-Out,LIFO)原则,即最后加入栈中的元素将最先被取出。栈在括号有效性检查中发挥着关键作用。

当我们遍历给定字符串时,我们将每个遇到的左括号压入栈中。当遇到一个右括号时,我们将栈顶的元素弹出并与当前的右括号进行比较。如果匹配成功,则说明当前右括号有效;否则,当前右括号无效。

例如,对于字符串 ([{}]),栈的操作步骤如下:

  1. 遇到左圆括号 (,将其压入栈中。
  2. 遇到左方括号 [,将其压入栈中。
  3. 遇到左花括号 {, 将其压入栈中。
  4. 遇到右圆括号 ), 将栈顶的元素 ( 弹出并与当前的右圆括号进行比较。匹配成功,说明当前右圆括号有效。
  5. 遇到右方括号 ], 将栈顶的元素 [ 弹出并与当前的右方括号进行比较。匹配成功,说明当前右方括号有效。
  6. 遇到右花括号 }, 将栈顶的元素 { 弹出并与当前的右花括号进行比较。匹配成功,说明当前右花括号有效。
  7. 栈中已空,说明所有括号都已正确匹配。

通过上述步骤,我们可以判断字符串 ([{}]) 是有效的。

算法实现

以下是用 Python 实现的括号有效性检查算法:

def is_valid_parentheses(s):
    stack = []
    parentheses_map = {")": "(", "}": "{", "]": "["}

    for char in s:
        if char in parentheses_map:
            top_element = stack.pop() if stack else "#"
            if parentheses_map[char] != top_element:
                return False
        else:
            stack.append(char)

    return not stack

s = "([{}])"
print(is_valid_parentheses(s))  # True

s = "([}])"
print(is_valid_parentheses(s))  # False

总结

括号有效性检查是编程中常见的基础问题,也是面试中经常考查的内容。通过栈数据结构,我们可以轻松地判断给定字符串中的括号是否有效。掌握括号有效性检查算法不仅可以帮助程序员编写出更加严谨的代码,还能在算法面试中脱颖而出。