中等
给定一个仅包含字符 '(' 和 ')' 的括号字符串 s。如果一个括号字符串可以通过以下规则构成,则称其为 平衡 的:
- 空字符串是平衡的。
- 如果
A是平衡的,那么'('+A+'))'也是平衡的。 - 如果
A和B都是平衡的,那么它们拼接后的字符串也是平衡的。
换句话说,每个左括号 '(' 都必须与其后面一对连续的右括号 '))' 匹配,并且每个右括号都必须恰好属于这样一对匹配的右括号。
例如,"())"、"())(())))" 和 "(())())))" 是平衡的,而 ")()"、"()))" 和 "(()))" 不是平衡的。
你可以在字符串的任意位置插入字符 '(' 和 ')',使其变为平衡字符串。
返回使 s 变为平衡字符串所需的 最少 插入次数。
示例 1:
输入: s = "(()))"
输出: 1
解释:
第二个 '(' 与两个连续的 ')' 匹配,但第一个 '(' 只有一个与之匹配的 ')'。我们需要在字符串末尾再插入一个 ')',使字符串变为 "(())))",此时字符串是平衡的。
示例 2:
输入: s = "())"
输出: 0
解释:
字符串已经是平衡的,因为其中的 '(' 后面有两个连续的 ')',并且这两个右括号恰好构成与该左括号匹配的一对右括号。
示例 3:
输入: s = "))())("
输出: 3
解释:
在字符串开头插入一个 '(',与最前面的 '))' 匹配;在字符串末尾插入 '))',与最后一个 '(' 匹配。总共需要插入 3 个括号。
提示:
1 <= s.length <= 105s仅由'('和')'组成。