1021. Remove Outermost Parentheses

Difficulty:
Related Topics:
Similar Questions:

    Problem

    A valid parentheses string is either empty "", "(" + A + ")", or A + B, where A and B are valid parentheses strings, and + represents string concatenation.

    A valid parentheses string s is primitive if it is nonempty, and there does not exist a way to split it into s = A + B, with A and B nonempty valid parentheses strings.

    Given a valid parentheses string s, consider its primitive decomposition: s = P1 + P2 + ... + Pk, where Pi are primitive valid parentheses strings.

    Return s **after removing the outermost parentheses of every primitive string in the primitive decomposition of **s.

      Example 1:

    Input: s = "(()())(())"
    Output: "()()()"
    Explanation: 
    The input string is "(()())(())", with primitive decomposition "(()())" + "(())".
    After removing outer parentheses of each part, this is "()()" + "()" = "()()()".
    

    Example 2:

    Input: s = "(()())(())(()(()))"
    Output: "()()()()(())"
    Explanation: 
    The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))".
    After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())".
    

    Example 3:

    Input: s = "()()"
    Output: ""
    Explanation: 
    The input string is "()()", with primitive decomposition "()" + "()".
    After removing outer parentheses of each part, this is "" + "" = "".
    

      Constraints:

    Solution (Java)

    class Solution {
        public String removeOuterParentheses(String s) {
            List<String> primitives = new ArrayList<>();
            int i = 1;
            while (i < s.length()) {
                int initialI = i - 1;
                int left = 1;
                while (i < s.length() && left > 0) {
                    if (s.charAt(i) == '(') {
                        left++;
                    } else {
                        left--;
                    }
                    i++;
                }
                primitives.add(s.substring(initialI, i));
                i++;
            }
            StringBuilder sb = new StringBuilder();
            for (String primitive : primitives) {
                sb.append(primitive, 1, primitive.length() - 1);
            }
            return sb.toString();
        }
    }
    

    Explain:

    nope.

    Complexity: