📌  相关文章
📜  在不使用堆栈的情况下检查括号是否平衡(1)

📅  最后修改于: 2023-12-03 14:51:22.992000             🧑  作者: Mango

在不使用堆栈的情况下检查括号是否平衡

在程序中,我们经常需要检查字符串中的括号是否匹配。而使用堆栈是最常见的解决方案之一。但是,我们是否可以在不使用堆栈的情况下,实现这个功能呢?

答案是可以的。我们可以使用一个计数器,记录 "(" 和 ")" 的数量差值。在遍历完整个字符串后,如果计数器的值为 0,那么说明这个字符串中的括号是平衡的。如果不为零,那么说明括号不平衡。下面是具体的实现代码。

代码实现
def check_parenthesis_balance(string):
    balance = 0
    for char in string:
        if char == "(":
            balance += 1
        elif char == ")":
            balance -= 1
        if balance < 0:
            return False
    return balance == 0

在这个函数中,我们使用一个变量 balance 来记录左右括号的数量差值。在遍历字符串时,如果遇到左括号就把 balance 加 1,遇到右括号就把 balance 减 1。如果 balance 的值变为负数,说明括号不平衡,直接返回 False。如果遍历完成后,balance 为 0,那么说明括号是平衡的,返回 True。

测试样例

下面是一些测试样例,以验证上述函数是否正确。

# 平衡的情况
assert check_parenthesis_balance("()") == True
assert check_parenthesis_balance("(())") == True
assert check_parenthesis_balance("(((())))") == True

# 不平衡的情况
assert check_parenthesis_balance("(") == False
assert check_parenthesis_balance(")") == False
assert check_parenthesis_balance("(()") == False
assert check_parenthesis_balance("())") == False
assert check_parenthesis_balance("((())") == False
assert check_parenthesis_balance("(()))") == False
总结

使用计数器来判断括号是否平衡,是一种更加简单的方法,不需要考虑堆栈的复杂性。但是需要注意的是,这种方式只适用于只有一种括号的情况,比如圆括号,如果有其他类型的括号混合在一起,这种方式就不能使用了。