LeetCode 859 Score of Parentheses
题目分析
Given a balanced parentheses string
S
, compute the score of the string based on the following rule:
()
has score 1AB
has scoreA + B
, where A and B are balanced parentheses strings.(A)
has score2 * A
, where A is a balanced parentheses string.Example 1:
Input: "()" Output: 1
Example 2:
Input: "(())" Output: 2
Example 3:
Input: "()()" Output: 2
Example 4:
Input: "(()(()))" Output: 6
Note:
S
is a balanced parentheses string, containing only(
and)
.2 <= S.length <= 50
给你一个配对好的括号串,计算这个字符串的得分。
思考
有题目中的要求知道只有()
才能得分,而且嵌套的()
会将得分加倍,所以题目可以简化为求所有的()
的得分,其中得分多少取决于被嵌套的层数。
代码实现
class Solution {
public:
int scoreOfParentheses(string S) {
int cnt = 0;
int res = 0;
// 记录上一个字符
char last = ' ';
for (auto &ch : S) {
// 深度加大
if (ch == '(') {
cnt++;
}
else {
// 深度变小
cnt--;
// 上一个是'('表名这一对是(),可以加分
if (last == '(') {
res += 1 << cnt;
}
}
// 记录字符
last = ch;
}
return res;
}
};
感想
挺简单的。