# 856. 括号的分数

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

  • () 得 1 分。

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

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

示例 1:

输入: "()"
输出: 1

示例 2:

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

示例 3:

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

示例 4:

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

提示:

  • S 是平衡括号字符串,且只含有 ( 和 ) 。

  • 2 <= S.length <= 50

# 题解

根据题意,我们可以求每组 "()“对应的深度 d,那么 $2^d$ 就是这组”()" 所贡献的分数。

class Solution {
public:
int scoreOfParentheses(string s) {
int ans=0,flag=0;
for(int i=0;i<s.length();i++){
flag+=(s[i]=='('?1:-1);
if(s[i]==')'&&s[i-1]=='('){
ans+=1<<flag;
}
}
return ans;
}
};

复杂度分析

  • 时间复杂度:$O (n)$
  • 空间复杂度:$O (1)$