856. Score of Parentheses

T: O(n)
S: O(n)
```java
class Solution {
    /*
    (()(()))
           x
    6
    */
    public int scoreOfParentheses(String s) {
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (!stack.isEmpty() && stack.peek() == '(') {
                    stack.pop();
                    stack.push('1'); // () case
                } else {
                    int sum = 0;
                    while (!stack.isEmpty() && stack.peek() != '(') {
                        sum += (stack.pop() - '0'); // ()()(()()) case
                    }
                    stack.pop();
                    stack.push((char)(2*sum + '0')); // ( 3 ) case, so 2*3
                }
            }
        }
        int result = 0;
        while (!stack.isEmpty()) {
            result += (stack.pop() - '0');
        }
        return result;
    }
}

/*
T: O(n)
S: O(n)
*/
```

Last updated