📜  找到字典序的下一个平衡括号序列(1)

📅  最后修改于: 2023-12-03 15:25:50.486000             🧑  作者: Mango

找到字典序的下一个平衡括号序列

介绍

在计算机编程中,括号序列(也称括号表达式)是一种非常常见的数据类型。一个括号序列是指由左右括号组成的字符串,例如"()"、"((()))"和"()()()"都是合法的括号序列,而"(()"和"))(("则不是。

平衡括号序列是指左右括号数量相等的括号序列,例如"()"、"(())"和"()()()"都是平衡括号序列,而"(()"、"))(("和"())("则不是。

本文将介绍如何找到字典序的下一个平衡括号序列。

算法实现

以下是使用递归算法实现的Python代码:

def next_balanced_parentheses(s):
    """
    找到下一个字典序的平衡括号序列
    :param s: 当前括号序列
    :return: 下一个字典序的平衡括号序列
    """
    if not s:
        return "()"
    cnt = 0
    for i in range(len(s) - 1, -1, -1):
        if s[i] == '(':
            cnt += 1
            if cnt < len(s) - i:
                break
        else:
            cnt -= 1
    if cnt >= 0:
        return None
    for i in range(len(s) - 1, -1, -1):
        if s[i] == '(' and i < len(s) - 1 and s[i + 1] == ')':
            suffix = next_balanced_parentheses(s[i + 2:])
            if suffix is not None:
                return s[:i] + ')' + suffix
    return None

算法思想是从右至左扫描括号序列,找到第一个左括号左边有更多右括号的位置,将该位置的左括号改为右括号,并将其右边的所有右括号按字典序排序。

例如,对于括号序列"()())()", 因为最右边的两个括号"()"是一个平衡的括号序列,所以该序列的下一个平衡括号序列为"()()()".

总结

递归是本算法的核心思想,通过递归调用找到下一个字典序的平衡括号序列。算法时间复杂度为 $O(n)$。