目录

0921:使括号有效的最少添加(1242 分)

力扣第 106 场周赛第 2 题

题目

只有满足下面几点之一,括号字符串才是有效的:

  • 它是一个空字符串,或者
  • 它可以被写成 ABAB 连接), 其中 AB 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串。

给定一个括号字符串 s ,在每一次操作中,你都可以在字符串的任何位置插入一个括号

  • 例如,如果 s = "()))" ,你可以插入一个开始括号为 "(()))" 或结束括号为 "())))"

返回 为使结果字符串 s 有效而必须添加的最少括号数

示例 1:

输入:s = "())"
输出:1

示例 2:

输入:s = "((("
输出:3

提示:

  • 1 <= s.length <= 1000
  • s 只包含 '('')' 字符。

相似问题:

分析

1249 的镜像版。顺序遍历遇到无效括号时,显然必须执行一次添加操作,最后才可能变为有效。

因此最少添加数就是 1249 中的最少删除数。

解答

1
2
3
4
5
6
7
def minAddToMakeValid(self, s: str) -> int:
    ans, size = 0, 0
    for char in s:
        size += 1 if char == '(' else -1 if char == ')' else 0
        if size < 0:
            ans, size = ans+1, 0
    return ans + size

24 ms