题目链接:856. 括号的分数(中等)
算法原理:
解法:O(N)一次遍历
0ms击败100.00%
时间复杂度O(N)
根据题意总结出以下规律:
():1分,()深度为0
(()):2分,最内层()深度为1
((())):4分,最内层()深度为2
(((()))):8分,最内层()深度为3
因此我们可以直接得出最内层()对整体的贡献:
遇到( 就深度d++,当遇到第一个)时,就可以直接计算最内层()对整体的贡献 2ᵈ,用1<<d表示
累加所有()对结果的贡献,即为返回值
Java代码:
java
class Solution {
//856. 括号的分数
public int scoreOfParentheses(String S) {
char[] s=S.toCharArray();
int d=0;
int ret=0;
for(int i=0;i<s.length;i++){
if(s[i]=='(') d++;
else{
d--;
//计算最里面的()对整体的最终贡献
if(s[i-1]=='(') ret+=1<<d;
}
}
return ret;
}
}