返回介绍

solution / 0800-0899 / 0856.Score of Parentheses / README

发布于 2024-06-17 01:03:33 字数 4066 浏览 0 评论 0 收藏 0

856. 括号的分数

English Version

题目描述

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

  • () 得 1 分。
  • AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
  • (A) 得 2 * A 分,其中 A 是平衡括号字符串。

 

示例 1:

输入: "()"
输出: 1

示例 2:

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

示例 3:

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

示例 4:

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

 

提示:

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

解法

方法一:计数

我们通过观察发现,() 是唯一贡献分数的结构,外括号只是为该结构添加了一些乘数。所以我们只需要关心 ()

我们用 $d$ 维护当前括号的深度,对于每个 (,我们将深度加一,对于每个 ),我们将深度减一。当我们遇到 () 时,我们将 $2^d$ 加到答案中。

我们举个实际的例子,以 (()(())) 为例,我们首先找到内部两个闭合括号 (),然后将分数加上对应的 $2^d$。实际上,我们是在计算 (()) + ((())) 的分数。

( ( ) ( ( ) ) )
  ^ ^   ^ ^

( ( ) ) + ( ( ( ) ) )
  ^ ^     ^ ^

时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 是字符串的长度。

括号相关类型题:

class Solution:
  def scoreOfParentheses(self, s: str) -> int:
    ans = d = 0
    for i, c in enumerate(s):
      if c == '(':
        d += 1
      else:
        d -= 1
        if s[i - 1] == '(':
          ans += 1 << d
    return ans
class Solution {
  public int scoreOfParentheses(String s) {
    int ans = 0, d = 0;
    for (int i = 0; i < s.length(); ++i) {
      if (s.charAt(i) == '(') {
        ++d;
      } else {
        --d;
        if (s.charAt(i - 1) == '(') {
          ans += 1 << d;
        }
      }
    }
    return ans;
  }
}
class Solution {
public:
  int scoreOfParentheses(string s) {
    int ans = 0, d = 0;
    for (int i = 0; i < s.size(); ++i) {
      if (s[i] == '(') {
        ++d;
      } else {
        --d;
        if (s[i - 1] == '(') {
          ans += 1 << d;
        }
      }
    }
    return ans;
  }
};
func scoreOfParentheses(s string) int {
  ans, d := 0, 0
  for i, c := range s {
    if c == '(' {
      d++
    } else {
      d--
      if s[i-1] == '(' {
        ans += 1 << d
      }
    }
  }
  return ans
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文