problem:
给定一个平衡括号字符串
S
,按下述规则计算该字符串的分数:
()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括号字符串。(A)
得2 * A
分,其中 A 是平衡括号字符串。
示例 1:
输入: "()" 输出: 1示例 2:
输入: "(())" 输出: 2示例 3:
输入: "()()" 输出: 2示例 4:
输入: "(()(()))" 输出: 6
思路:
(()(())) = (()) + ((())) , 且 分数 = 2^(括号层数-1)
出现 '(' 代表层数+1 , 出现 ')' 代表层数 -1
class Solution {
public:
int scoreOfParentheses(string S) {
int deep=0,ans=0;
for(int i=0;i<S.length();i++){
if(S[i] == '(')deep++;
else deep--;
if(S[i]==')' && S[i-1]=='(') ans += 1 << deep;
}
return ans;
}
};