给定一个平衡括号字符串 S
,按下述规则计算该字符串的分数:
()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括号字符串。(A)
得2 * A
分,其中 A 是平衡括号字符串。
由于问题是递归定义的,所以可以很简单地用递归去解这个题。
用栈解决的话,如果遇到左括号,则入栈。如果遇到右括号,判断栈顶是不是右括号,如果是则说明是(),出栈并压数字1;否则说明是(A)型,将内部数字全部加起来再次入栈。最后栈内是各种数字,加起来就可以了。
class Solution { public: int scoreOfParentheses(string S) { stack<string> s; for(char& i : S) { if(i == ‘(‘) { s.push("("); } else { if(!s.empty() && s.top() == "(") { s.pop(); s.push("1"); } else { int sum = 0; while(!s.empty() && s.top() != "(") { sum += stoi(s.top()); s.pop(); } if(!s.empty()) { s.pop(); } s.push(to_string(sum * 2)); } } } int res = 0; while(!s.empty()) { res += stoi(s.top()); s.pop(); } return res; } };
原文地址:https://www.cnblogs.com/hlk09/p/9735283.html
时间: 2024-10-08 19:25:07