在不使用堆栈或正则表达式的情况下检查平衡括号,可以通过计数器来实现。这种方法适用于简单的括号匹配问题,即只考虑圆括号 ()
的情况。以下是基本思路和示例代码:
(
必须有一个对应的右括号 )
,并且左括号必须在对应的右括号之前。使用两个计数器分别跟踪未匹配的左括号和右括号的数量。遍历字符串时,遇到左括号增加左括号计数器,遇到右括号增加右括号计数器。如果在任何时候右括号计数器超过了左括号计数器,则括号不平衡。
def is_balanced(s):
left_count = 0
right_count = 0
for char in s:
if char == '(':
left_count += 1
elif char == ')':
right_count += 1
if right_count > left_count:
return False
return left_count == right_count
# 测试
print(is_balanced("()")) # True
print(is_balanced("(())")) # True
print(is_balanced("(()))")) # False
print(is_balanced(")(")) # False
{}
和 []
),则需要扩展计数器逻辑或使用更复杂的数据结构(如堆栈)。如果需要处理多种类型的括号,可以考虑使用一个字典来映射每种括号的匹配关系,并使用堆栈来跟踪未匹配的括号。虽然这超出了不使用堆栈的限制,但可以作为一种扩展思路:
def is_balanced_multi(s):
stack = []
bracket_map = {')': '(', '}': '{', ']': '['}
for char in s:
if char in bracket_map.values():
stack.append(char)
elif char in bracket_map.keys():
if stack == [] or bracket_map[char] != stack.pop():
return False
else:
return False
return stack == []
# 测试
print(is_balanced_multi("()[]{}")) # True
print(is_balanced_multi("{[()]}")) # True
print(is_balanced_multi("{[(])}")) # False
print(is_balanced_multi("{{{{")) # False
这种方法虽然使用了堆栈,但提供了更广泛的括号匹配能力。
领取专属 10元无门槛券
手把手带您无忧上云