zoukankan      html  css  js  c++  java
  • 1021. Remove Outermost Parentheses

    package LeetCode_1021
    
    import java.util.*
    
    /**
     * 1021. Remove Outermost Parentheses
     * https://leetcode.com/problems/remove-outermost-parentheses/
     * 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 = P_1 + P_2 + ... + P_k,
    where P_i 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: "(()())(())"
    Output: "()()()"
    Explanation:
    The input string is "(()())(())", with primitive decomposition "(()())" + "(())".
    After removing outer parentheses of each part, this is "()()" + "()" = "()()()".
    
    Example 2:
    Input: "(()())(())(()(()))"
    Output: "()()()()(())"
    Explanation:
    The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))".
    After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())".
    
    Example 3:
    Input: "()()"
    Output: ""
    Explanation:
    The input string is "()()", with primitive decomposition "()" + "()".
    After removing outer parentheses of each part, this is "" + "" = "".
     * */
    class Solution {
        /*
        * solution: Stack, heep to keep tracking ( or ) if outermost,
        * Time complexity:O(n), Space complexity:O(n)
        * */
        fun removeOuterParentheses(S: String): String {
            if (S == "") {
                return ""
            }
            val stack = Stack<Char>()
            val sb = StringBuilder()
            for (c in S) {
                if (c == '(') {
                    //if stack not empty and current is (, this one is not outermost, add into result
                    if (stack.isNotEmpty()) {
                        sb.append(c)
                    }
                    stack.push(c)
                } else {
                    stack.pop()
                    if (stack.isNotEmpty()){
                        sb.append(c)
                    }
                }
            }
            return sb.toString()
        }
    }
  • 相关阅读:
    linux系统安装mysql数据库
    laypage分页控件使用方法
    could not get wglGetExtensionsStringARB
    Eclipse -- 自动补齐设置和其他用法
    Android开发--AndroidManifest.xml文件解析
    Java--常识
    课题论文写作时思路---目前存在的不足
    课题论文之调研---已有研究算法概述
    课题论文之调研---脏腑辨证
    Bayesian 网络分类算法
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13803348.html
Copyright © 2011-2022 走看看