题目链接
思路:栈
分析:语言不好描述,看图吧。。
举个简单的例子:"(()(()))"
第6步的时候,栈顶为(,当前为),那么将栈顶改为1。
第7步的时候,栈顶为1,当前为),说明里面的数字是内部的,那么将内部的数字加起来,乘以2,再放回栈顶。
第8步也是如此。
然后将栈内的数字都加起来即可。
代码中用数字0代替(。
代码:
class Solution {
public int scoreOfParentheses(String s) {
if(s.length()==2){
return 1;
}
int len = s.length();
int[] stack = new int[len];
int top = -1;
for(int i = 0; i < len; i++){
// (直接入栈,不过这里用的是数字0代替(
if(s.charAt(i)=='('){
// stack[++top] = '(';
stack[++top] = 0;
}else{
//如果栈顶是( 当前元素是)
if(stack[top]==0){
//将栈顶置1
stack[top] = 1;
}else{
//如果栈顶不是(,而是数字,那么将中间的数字加起来,然后乘以2
int tem = 0;
while(top!=-1 && stack[top]!=0){
tem += stack[top--];
}
stack[top] = (tem * 2);
}
}
}
//统计中间的数字和
int res = 0;
while(top!=-1){
res += stack[top--];
}
return res;
}
}