栈的应用.
class Solution(object): def minAddToMakeValid(self, S): """ :type S: str :rtype: int """ stack=[] for s in S: if s=='(': stack.append(s) else: if stack: if stack[-1]=='(': stack.pop() else: stack.append(s) else: stack.append(s) return len(stack)
这种方法是O(n)时间复杂度,O(n)空间复杂度,其实没有必要实现一个栈,因为右括号如果进入了栈就不可能再被消去了.所以就两个变量记录两边括号数就行了,空间复杂度为O(1):
class Solution(object): def minAddToMakeValid(self, S): """ :type S: str :rtype: int """ left,right=0,0 for s in S: if s=='(': left+=1 else: if left>0: left-=1 else: right+=1 return left+right