Q:
给定一个由 '('
和 ')'
括号组成的字符串 S
,我们需要添加最少的括号( '('
或是 ')'
,可以在任何位置),以使得到的括号字符串有效。
从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
- 它是一个空字符串,或者
- 它可以被写成
AB
(A
与B
连接), 其中A
和B
都是有效字符串,或者 - 它可以被写作
(A)
,其中A
是有效字符串。
给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。
思路:还是使用栈的思想,当能够产生()组合时,pop末位,代码如下:
class Solution:
def minAddToMakeValid(self, S):
"""
:type S: str
:rtype: int
"""
res = []
for i in range(len(S)):
if S[i] == '(':
res.append(S[i])
elif S[i] == ')':
if res:
if res[-1] == '(':
res.pop()
else:
res.append(S[i])
else:
res.append(S[i])
return len(res)