Leetcode 921. Minimum Add to Make Parentheses Valid

栈的应用.

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

 

posted @ 2019-03-12 19:59  周洋  阅读(171)  评论(0编辑  收藏  举报