Given a balanced parentheses string S
, compute the score of the string based on the following rule:java
()
has score 1AB
has score A + B
, where A and B are balanced parentheses strings.(A)
has score 2 * A
, where A is a balanced parentheses string.code
Example 1:leetcode
Input: "()" Output: 1
Example 2:get
Input: "(())" Output: 2
Example 3:string
Input: "()()" Output: 2
Example 4:io
Input: "(()(()))" Output: 6
Note:class
S
is a balanced parentheses string, containing only (
and )
.2 <= S.length <= 50
题目地址变量
这道题分类都有点难,能够算在智力题里面。主要是要理解一个套路:sed
"(()(()))" -> "(())" + "((()))" = 2 + 4
这样就会发现,能够维护一个层数变量,而后遍历的时候,遇到'('
就加一,遇到")"就减一,遇到"()"
这一对,就至关于找到了一组。而后把找到的全部组相加就好了。遍历
class Solution { public int scoreOfParentheses(String S) { int d = -1; int result = 0; for(int i=0;i<S.length();i++){ d += S.charAt(i)=='('?1:-1; if(S.charAt(i)=='(' && S.charAt(i+1)==')'){ result += 1 << d; } } return result; } }