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