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)