📜  查找表达式中给定左括号的右括号索引(1)

📅  最后修改于: 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  # 没有找到对应的右括号

使用以上三种方法,可以很好地查找表达式中给定左括号的右括号索引。在实际开发中,应该根据实际情况选择不同的方法,以便保证代码的性能和可维护性。