📅  最后修改于: 2023-12-03 14:55:36.225000             🧑  作者: Mango
在编程中,经常需要查找表达式中指定左括号的对应右括号索引。这个问题有几种解决方法,可以用栈、递归、循环等方式实现。下面就分别介绍一下这几种方法的实现方式。
使用栈可以很好地处理括号的嵌套关系,可以将左括号压入栈中,当遇到右括号时,弹出栈中的左括号。当栈为空时,则找到了对应的右括号。以下是使用栈查找右括号索引的示例代码:
def find_matching_parentheses(expr, left_paren_idx):
stack = []
for i in range(left_paren_idx, len(expr)):
if expr[i] == '(':
stack.append(i)
elif expr[i] == ')':
stack.pop()
if not stack:
return i
return -1 # 没有找到对应的右括号
使用递归也可以很好地处理括号的嵌套关系。当找到一个左括号后,递归调用函数,查找这个左括号对应的右括号。以下是使用递归查找右括号索引的示例代码:
def find_matching_parentheses(expr, left_paren_idx):
count = 0
for i in range(left_paren_idx, len(expr)):
if expr[i] == '(':
count += 1
elif expr[i] == ')':
count -= 1
if count == 0:
return i
return -1 # 没有找到对应的右括号
使用循环也可以实现查找表达式中给定左括号的右括号索引的功能。当找到一个左括号后,遍历后面的字符,维护一个计数器,记录左括号和右括号的数量。当左括号数量和右括号数量相等时,说明找到了对应的右括号。以下是使用循环查找右括号索引的示例代码:
def find_matching_parentheses(expr, left_paren_idx):
l_count = 0
r_count = 0
for i in range(left_paren_idx, len(expr)):
if expr[i] == '(':
l_count += 1
elif expr[i] == ')':
r_count += 1
if l_count == r_count:
return i
return -1 # 没有找到对应的右括号
使用以上三种方法,可以很好地查找表达式中给定左括号的右括号索引。在实际开发中,应该根据实际情况选择不同的方法,以便保证代码的性能和可维护性。