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
解答如下:
class Solution {
public:
int scoreOfParentheses(string S) {
int index=0;
return compute(S,index);
}
int compute(string S,int &index){
int temp =0;
//()(()) = 1 + 2* 1
for(;index<S.length();index++){
if(S[index]=='('&&S[index+1]==')'){
//当前字符为"("时,其下一个字符为“)”时,根据定义则此部分一定为数值为1
temp+=1;
index++;
}else if(S[index]=='('&&S[index+1]=='('){
//当前字符为“(”,其下一个字符为“(”时,则此部分一定为2*底层得出的数字
index++;
temp += 2*compute(S,index);//进入底层
}else{
return temp; //遇到上一层留下来的")",返回上一层
}
}
return temp;//处理结束,返回结果
}
};