• 1249. Minimum Remove to Make Valid Parentheses (Solution 2: Two ArrayList)


    package LeetCode_1249
    
    /**
     * 1249. Minimum Remove to Make Valid Parentheses
     * https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/description/
     *
     * Given a string s of '(' , ')' and lowercase English characters.
    Your task is to remove the minimum number of parentheses ( '(' or ')', in any positions ) so that the resulting parentheses string is valid and return any valid string.
    Formally, a parentheses string is valid if and only if:
    1. It is the empty string, contains only lowercase characters, or
    2. It can be written as AB (A concatenated with B), where A and B are valid strings, or
    3. It can be written as (A), where A is a valid string.
    
    Example 1:
    Input: s = "lee(t(c)o)de)"
    Output: "lee(t(c)o)de"
    Explanation: "lee(t(co)de)" , "lee(t(c)ode)" would also be accepted.
    
    Example 2:
    Input: s = "a)b(c)d"
    Output: "ab(c)d"
    
    Example 3:
    Input: s = "))(("
    Output: ""
    Explanation: An empty string is also valid.
    
    Example 4:
    Input: s = "(a(b(c)d)"
    Output: "a(b(c)d)"
    
    Constraints:
    1 <= s.length <= 10^5
    s[i] is one of  '(' , ')' and lowercase English letters.
     * */
    class Solution {
        /*
        * solution 1: BFS, TLE, Time complexity:O(2^n), Space complexity:O(2^n);
        *
        * solution 2: two list, keep tracking the index of open and close parentheses, 
        * Time complexity:O(n), Space complexity:O(n);
        * */
        fun minRemoveToMakeValid(s: String): String {
            //solution 2:
            val open = ArrayList<Int>()
            val close = ArrayList<Int>()
            for (i in s.indices) {
                val c = s[i]
                if (c == '(') {
                    open.add(i)
                } else if (c == ')') {
                    if (open.isNotEmpty()) {
                        //for keep both balance
                        open.removeAt(open.lastIndex)
                    } else {
                        close.add(i)
                    }
                }
            }
            val charArray = s.toCharArray()
            //replace the invalid parentheses
            for (i in open) {
                charArray[i] = '#'
            }
            for (i in close) {
                charArray[i] = '#'
            }
            val result = StringBuilder()
            for (ch in charArray) {
                if (ch != '#') {
                    result.append(ch)
                }
            }
            return result.toString()
        }
    }
  • 相关阅读:
    LeetCode: Text Justification 解题报告
    LeetCode: Evaluate Reverse Polish Notation 解题报告
    telnet服务搭建
    CentOS 7 快速部署 ELK
    CSVN配置自动备份策略
    使用mysqlproxy实现mysql读写分离
    linux挂载windows共享文件夹
    Centos7.3使用花生壳映射端口
    rpm使用
    linux运维注意事项
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13423898.html
Copyright © 2020-2023  润新知