• 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()
        }
    }
  • 相关阅读:
    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2
    网站状态保存方法
    学习MVC第一课:初识MVC
    ASP.NET MVC 中动态从路由中获取URL
    ASP.NET MVC2程序开发入门到精通系列课程01
    OpenCV 里的sigma 是多少
    日期大小比较
    安装完ODAC,出现ORA12560:TNS:协议适配器错误
    Spring+IBATIS+Struts2开发流程
    【转】SSH标准配置
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13803348.html
Copyright © 2020-2023  润新知