📜  计算括号序列对,以使括号平衡(1)

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

计算括号序列对,以使括号平衡

在编程问题中,经常需要检查括号序列是否平衡,即左括号能否与右括号匹配。本文将介绍一种方法,用于计算括号序列对,使其平衡。

问题描述

给定一个只包含左右括号的字符串,例如 "(())" 或 "()()()(",请计算需要添加多少个左右括号,才能使其成为平衡的括号序列。

解题思路

本文将介绍两种解法:栈和计数器。

栈是用于存储数据的一种数据结构,具有先进先出(Last-In-First-Out)的特性。这里我们可以利用栈来解决问题。

遍历字符串,遇到左括号则将其压入栈中;遇到右括号则将栈顶元素弹出。如果栈顶元素与当前右括号匹配,则说明当前括号序列已经平衡;否则需要添加与当前右括号匹配的左括号。

def calculate_parentheses_pairs(s: str) -> int:
    stack = []
    count = 0
    for c in s:
        if c == '(':
            stack.append(c)
        elif c == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                count += 1
    count += len(stack)
    return count
计数器

另一种解法是使用计数器。我们定义两个计数器 left 和 right,分别记录串中左括号和右括号出现的次数。如果 right 大于 left,则说明当前括号序列不平衡,需要添加左括号来匹配右括号。

def calculate_parentheses_pairs(s: str) -> int:
    left, right, count = 0, 0, 0
    for c in s:
        if c == '(':
            left += 1
        elif c == ')':
            right += 1
            if right > left:
                count += 1
                left += 1
    count += left - right
    return count
结论

在本文中,我们介绍了两种方法来计算括号序列对,以使其成为平衡的括号序列。这两种方法都具有线性时间复杂度,适用于大多数实际应用场景。