856. 括号的分数
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:

() 得 1 分。
AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
(A) 得 2 * A 分,其中 A 是平衡括号字符串。
class Solution:
    def scoreOfParentheses(self, S: str) -> int:
        stack = []
        res = 0
        for i in S:
            if i=="(":
                stack.append(res)
                res = 0
            elif i==")":
                p = stack.pop()
                res = p + 1 if res == 0 else p + 2 * res
            else:
                res += int(i)
        return res
1111. 有效括号的嵌套深度
有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。
class Solution:
    def maxDepthAfterSplit(self, seq: str) -> List[int]:
        cnt = 0
        res = []
        for c in seq:
            if c == '(':
                cnt += 1
                res.append(cnt&1)
            else:
                res.append(cnt&1)
                cnt -= 1
        return res
921. 使括号有效的最少添加
给定一个由 '('')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效。
从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
它是一个空字符串,或者
它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
它可以被写作 (A),其中 A 是有效字符串。
给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。

示例 1:

输入:"())"
输出:1
示例 2:
输入:"((("
输出:3

class Solution:
    def minAddToMakeValid(self, S: str) -> int:
        ans = 0 
        count = 0
        for i in S:
            if i == '(':
                ans += 1
            else:
                ans -= 1
                #处理右边》左边的实例。将右边多出的记录先来。
            if ans < 0:
                count += 1
                ans += 1
        count += ans
        return count

class Solution:
    def minAddToMakeValid(self, S: str) -> int:
        i = 0
        while True:
            S = S.replace("()",'')
            S_len = len(S)
            if i != S_len:
                i = S_len
            else:
                break
        return i

class Solution(object):
    def minAddToMakeValid(self, S):
        """
        :type S: str
        :rtype: int
        """
        myStack = []
        res = 0
        for item in S:
            if item == ')':
                if myStack and myStack[-1] == '(':
                    myStack.pop()
                else:
                    res += 1
            else:
                myStack.append(item)
        res += len(myStack)
        return res
1249. 移除无效的括号
给你一个由 '('')' 和小写字母组成的字符串 s。
你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
请返回任意一个合法字符串。
有效「括号字符串」应当符合以下 任意一条 要求:
空字符串或只包含小写字母的字符串
可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」
示例 1:
输入:s = "lee(t(c)o)de)"
输出:"lee(t(c)o)de"
解释:"lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案

class Solution:
    def minRemoveToMakeValid(self, s: str) -> str:
        #使用栈的方式记录‘(’或者‘)’的位置。最后使用新的栈剥离不合适的数据(索引处理)
        stack_left ,stack_right = [] , []
        for i in range(len(s)):
            if s[i] == "(":
                stack_left.append(i)
            elif s[i] == ")":
                if not stack_left:
                    stack_right.append(i)
                else:
                    stack_left.pop()

        tmp = []
        for i in range(len(s)):
            if i not in stack_left and i not in stack_right:
                tmp.append(s[i])
        return "".join(tmp)

 

posted on 2020-07-29 12:15  topass123  阅读(148)  评论(0编辑  收藏  举报