列表

详情


856. 括号的分数

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

 

示例 1:

输入: "()"
输出: 1

示例 2:

输入: "(())"
输出: 2

示例 3:

输入: "()()"
输出: 2

示例 4:

输入: "(()(()))"
输出: 6

 

提示:

  1. S 是平衡括号字符串,且只含有 ( 和 ) 。
  2. 2 <= S.length <= 50

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int scoreOfParentheses(string s) { } };

python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2022-10-09 09:39:29

class Solution:
    def scoreOfParentheses(self, s: str) -> int:
        n = len(s)
        if n == 2:
            return 1
        bal = 0
        for i, c in enumerate(s):
            bal += 1 if c == '(' else -1
            if bal == 0:
                if i == n - 1:
                    return 2 * self.scoreOfParentheses(s[1:-1])
                return self.scoreOfParentheses(s[:i + 1]) + self.scoreOfParentheses(s[i + 1:])

python3 解法, 执行用时: 36 ms, 内存消耗: 15 MB, 提交时间: 2022-10-09 09:38:26

class Solution:
    def scoreOfParentheses(self, s: str) -> int:
        st = [0]
        for c in s:
            if c == '(':
                st.append(0)
            else:
                v = st.pop()
                st[-1] += max(2 * v, 1)
        return st[-1]

python3 解法, 执行用时: 32 ms, 内存消耗: 15 MB, 提交时间: 2022-10-09 09:36:23

class Solution:
    def scoreOfParentheses(self, s: str) -> int:
        ans = bal = 0 # bal为每个(的深度
        for i, c in enumerate(s):
            bal += 1 if c == '(' else -1
            if c == ')' and s[i - 1] == '(':
                ans += 1 << bal
        return ans

上一题