原題地址921. 使括號有效的最少添加
給定一個由 '('
和 ')'
括號組成的字符串 S
,我們需要添加最少的括號( '('
或是 ')'
,可以在任何位置),以使得到的括號字符串有效。
從形式上講,只有滿足下面幾點之一,括號字符串纔是有效的:
- 它是一個空字符串,或者
- 它可以被寫成
AB
(A
與B
連接), 其中A
和B
都是有效字符串,或者 - 它可以被寫作
(A)
,其中A
是有效字符串。
給定一個括號字符串,返回爲使結果字符串有效而必須添加的最少括號數。
示例 1:
輸入:"())"
輸出:1
示例 2:
輸入:"((("
輸出:3
示例 3:
輸入:"()"
輸出:0
示例 4:
輸入:"()))(("
輸出:4
提示:
S.length <= 1000
S 只包含 '(' 和 ')' 字符。
算法
逐個遍歷字符,若爲 '(' ,計數 left 加1;若爲 ')' ,如果先前有 '(' ,則 left 減1;否則 right 加1。最終 left+right 就是無法匹配上的括號的數量。
代碼
class Solution:
def minAddToMakeValid(self, S):
"""
:type S: str
:rtype: int
"""
if not S:
return 0
left, right = 0, 0
for i in S:
if i == '(':
left += 1
elif left > 0:
left -= 1
else:
right += 1
return right + left