leetcode 856 括號的分數
阿新 • • 發佈:2018-11-21
給定一個平衡括號字串 S
,按下述規則計算該字串的分數:
()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括號字串。(A)
得2 * A
分,其中 A 是平衡括號字串。
示例 1:
輸入: "()" 輸出: 1
示例 2:
輸入: "(())" 輸出: 2
示例 3:
輸入: "()()" 輸出: 2
示例 4:
輸入: "(()(()))" 輸出: 6
提示:
S
(
和)
。2 <= S.length <= 50
很明顯,這一題可以用棧來解決。
我們把單獨一個左括號算作0分,遍歷字串S,遇到左括號就直接算0分進棧,遇到右括號,先判斷棧頂是否為0,即是否為左括號,是的話就說明這是一個‘()’,那麼可以將棧頂的0彈出,再壓1分進去,如果棧頂非0,則說明是'(AB)',那麼不斷地將棧頂的分數取出,直到棧頂是0,即左括號為止,然後將該0彈出,並將取出的分數乘2再壓棧。
最後遍歷棧,將所有的分數加起來就是最終的結果。
class Solution { public int scoreOfParentheses(String S) { Stack<Integer> s = new Stack<Integer>(); for(int i=0;i<S.length();i++){ if(S.charAt(i)=='('){ s.push(0); } else{ if(s.peek()!=0){ int tmp=0; while(!s.empty()&&s.peek()!=0){ tmp+=s.peek(); s.pop(); } s.pop(); s.push(2*tmp); } else{ s.pop(); s.push(1); } } } int res=0; while(!s.empty()){ res += s.peek(); s.pop(); } return res; } }