leetcode-161周赛-5249-移除无效的括号

题目描述:

 

 

 

 自己的提交:O(N)

class Solution:
    def minRemoveToMakeValid(self, s: str) -> str:
        #from collections import Counter
        flag = [True] * len(s)
        stack = []
        for i,v in enumerate(s):
            if v == "(":
                stack.append(i)
                flag[i] = False
            if v == ")":
                if stack:
                    flag[stack.pop()] = True
                else:
                    flag[i] = False
        res = ""
        for i in range(len(s)):
            if flag[i] == True:
                res += s[i]
        return res

优化:

class Solution:
    def minRemoveToMakeValid(self, s: str) -> str:
        pos = set()
        stk = []
        for i, ch in enumerate(s):
            if s[i] == '(':
                stk.append(i)
            elif s[i] == ')':
                if len(stk) == 0:
                    pos.add(i)
                else:
                    stk.pop()
        for p in stk:
            pos.add(p)
        ans = []
        for i, ch in enumerate(s):
            if i not in pos:
                ans.append(ch)
        return "".join(ans)

 

posted @ 2019-11-04 10:56  oldby  阅读(141)  评论(0编辑  收藏  举报