📜  算法检查平衡括号 (1)

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

算法检查平衡括号

在编程中,我们经常需要检查代码中的括号是否匹配。如果出现不匹配的情况,程序就可能会崩溃或者出现意想不到的错误。因此,编写一个算法检查括号的平衡性是非常必要的。

算法思路

我们可以使用栈来检查括号的平衡性。具体做法是,从左到右遍历每个括号,在遍历的过程中,如果是左括号,我们就将其压入栈中;如果是右括号,我们就从栈中弹出一个左括号,并比较它们是否匹配。如果不匹配,就说明括号不平衡,反之则平衡。

总体思路如下:

  1. 创建一个栈
  2. 遍历字符串中所有的括号
  3. 如果遇到左括号,将其压入栈中
  4. 如果遇到右括号,从栈中弹出一个左括号,并比较是否匹配
  5. 如果匹配,则继续遍历;否则说明括号不平衡,直接返回false
  6. 遍历完所有括号后,如果栈为空,则说明括号平衡,返回true;否则说明括号不平衡,返回false

下面是具体的代码实现:

def is_balanced_parentheses(s):
    stack = []
    for c in s:
        if c == '(' or c == '[' or c == '{':
            stack.append(c)
        elif c == ')' and (not stack or stack.pop() != '('):
            return False
        elif c == ']' and (not stack or stack.pop() != '['):
            return False
        elif c == '}' and (not stack or stack.pop() != '{'):
            return False
    return not stack
实例测试

让我们使用一些示例字符串来测试我们的算法:

print(is_balanced_parentheses('()'))
# Output: True

print(is_balanced_parentheses('({[]})'))
# Output: True

print(is_balanced_parentheses('({[}])'))
# Output: False

print(is_balanced_parentheses('{{}'))
# Output: False
算法分析

该算法的时间复杂度为O(n),其中n为字符串长度。我们需要遍历字符串中的每个字符,因此算法的时间复杂度与字符串长度呈线性关系。

该算法的空间复杂度也为O(n),其中n为字符串长度。在最坏的情况下,我们需要将所有左括号压入栈中,因此栈的大小与字符串长度呈线性关系。

总结

在编程中,检查括号的平衡性是一个非常基本的需求。我们可以使用栈来实现该功能,算法的思路非常直观并且易于理解。