All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1001_1100.s1021_remove_outermost_parentheses.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1001_1100.s1021_remove_outermost_parentheses;

// #Easy #String #Stack #2022_02_25_Time_4_ms_(75.39%)_Space_42.3_MB_(50.45%)

import java.util.ArrayList;
import java.util.List;

/**
 * 1021 - Remove Outermost Parentheses\.
 *
 * Easy
 *
 * A valid parentheses string is either empty `""`, `"(" + A + ")"`, or `A + B`, where `A` and `B` are valid parentheses strings, and `+` represents string concatenation.
 *
 * *   For example, `""`, `"()"`, `"(())()"`, and `"(()(()))"` are all valid parentheses strings.
 *
 * 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:**
 *
 * *   1 <= s.length <= 105
 * *   `s[i]` is either `'('` or `')'`.
 * *   `s` is a valid parentheses string.
**/
public class Solution {
    public String removeOuterParentheses(String s) {
        List 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();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy