📅  最后修改于: 2023-12-03 15:28:09.484000             🧑  作者: Mango
在编写程序时,经常会遇到括号不匹配的情况,例如在if语句、循环语句等中。如果括号不匹配,程序就会出现错误,因此需要及时识别并标记表达式中不匹配的括号。下面是一些方法可以实现这一功能。
栈是一种后进先出(LIFO)的数据结构,可以用来匹配左右括号。具体实现如下:
示例代码:
def match_parentheses(expression):
stack = []
for i, char in enumerate(expression):
if char == '(':
stack.append(i)
elif char == ')':
if stack:
stack.pop()
else:
return i
if stack:
return stack.pop()
示例输出:
>>> match_parentheses("((1 + 2) * (3 - 4))")
None
>>> match_parentheses("((1 + 2) * (3 - 4)")
10
>>> match_parentheses("((1 + 2) * (3 - 4)) + (5 * 6")
18
计数器方法是记录左右括号的个数,从而识别不匹配的括号。具体实现如下:
示例代码:
def match_parentheses(expression):
left = right = 0
for i, char in enumerate(expression):
if char == '(':
left += 1
elif char == ')':
right += 1
if right > left:
return i
if left != right:
return len(expression) - 1
示例输出:
>>> match_parentheses("((1 + 2) * (3 - 4))")
None
>>> match_parentheses("((1 + 2) * (3 - 4)")
10
>>> match_parentheses("((1 + 2) * (3 - 4)) + (5 * 6")
18
以上两种方法都可以实现识别并标记表达式中不匹配的括号的功能。使用栈的方法可以处理多种不同类型的括号(例如方括号、大括号等),但是需要使用额外的空间来保存栈。使用计数器的方法则更为简单,但只能处理单一类型的括号。对于表达式中包含多种类型的括号,我们可以根据需要选择方法。