如果是(,就进栈,如果是),则不断出栈且将出栈的数相加,直到出现(,
如果出栈的数相加后为0,则将1进栈,否则将sum * 2进栈
如
[(] # 遇到 ( 往栈添加
[(, (] # 继续添加
[(, 1] # 遇到 ) 合成一个1
[(, 1, (] # 遇到 ( 往栈添加
[(, 1, (, (] # 继续添加
[(, 1, (, 1] # 遇到 ) 合成一个1
[(, 1, 2] # 遇到 ) ,结构就是(1), 所以计算的话是 1 * 2
[6] # 遇到 ) ,结构是(1,2), 所以计算的话是 (1 + 2) * 2
class Solution { public: stack<int> st; int scoreOfParentheses(string s) { int len = s.length(); for(int i = 0; i < len; i++) { if(s[i] == '(') st.push(0); else { int sum = 0; while(st.top() != 0) { sum += st.top(); st.pop(); } st.pop(); if(sum == 0) st.push(1); else st.push(sum * 2); } } int ret = 0; while(!st.empty()) { ret += st.top(); st.pop(); } return ret; } };