题目描述
给定一个平衡括号字符串 S
,按下述规则计算该字符串的分数:
()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括号字符串。(A)
得2 * A
分,其中 A 是平衡括号字符串。
示例 1:
输入: "()" 输出: 1
示例 2:
输入: "(())" 输出: 2
示例 3:
输入: "()()" 输出: 2
示例 4:
输入: "(()(()))" 输出: 6
提示:
S
是平衡括号字符串,且只含有(
和)
。2 <= S.length <= 50
解题思路
数构成平衡括号字符串的左括号的所在层数(连续的取最大深度),然后在结果上加上pow(2,i)
例如:
"( )" 左括号层数0, pow(2,0)
"( ) ( )" 左括号层数0,0 pow(2,0)+pow(2,0)
"( ( ) )" 左括号层数1 pow(2,1)
"( ( ) ( ( ) ) )" 左括号层数1,2 pow(2,1)+pow(2,2)
"( ( ) ( ( ) ) ) ( ( ( ( ) ) ) )" 左括号层数1,2,3 pow(2,1)+pow(2,2)+pow(2,3)
int scoreOfParentheses(string S) {
int len = S.length();
int pre = 0,now = 0,i = 0;
int ans = 0;
while(i < len){
while(i<len && S[i] == '('){
i++;
now++;
}
ans += pow(2,now-1);
while(i<len && S[i] == ')'){
i++;
now--;
}
}
return ans;
}