题目描述:
给定一个平衡括号字符串 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) { //( ( ( ) ( ) ) //( 4 ) // use -1 to represent '(' stack<int> stk; for(char ch : S){ if(ch == '('){ stk.push(-1); }else{ int val = stk.top(); int tmp = 0; while(val != -1){ tmp += stk.top(); stk.pop(); val = stk.top(); } stk.pop(); if(tmp == 0){ stk.push(1); }else{ stk.push(2*tmp); } } } int res = 0; while(!stk.empty()){ res += stk.top(); stk.pop(); } return res; } };
来源:https://www.cnblogs.com/zhanzq/p/10953720.html