zoukankan      html  css  js  c++  java
  • 栈的括号问题(2)

    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)
  • 相关阅读:
    Codeforces 703D Mishka and Interesting sum 离线+树状数组
    Codeforces 701E Connecting Universities 贪心
    Codeforces 680D Bear and Tower of Cubes 贪心 DFS
    Codeforces 677D Vanya and Treasure 暴力+BFS
    Codeforces 659F Polycarp and Hay 并查集
    Codeforces 676E The Last Fight Between Human and AI 规律
    hadoop 2.6.0 分布式 + Spark 1.1.0 集群环境
    Pcap 数据报解析
    Codeforces 667D World Tour 最短路
    .虚
  • 原文地址:https://www.cnblogs.com/topass123/p/13396381.html
Copyright © 2011-2022 走看看