• 301. Remove Invalid Parentheses


    package LeetCode_301
    
    import java.util.*
    import kotlin.collections.ArrayList
    import kotlin.collections.HashSet
    
    /**
     * 301. Remove Invalid Parentheses
     * https://leetcode.com/problems/remove-invalid-parentheses/description/
     *
     * Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.
    Note: The input string may contain letters other than the parentheses ( and ).
    
    Example 1:
    Input: "()())()"
    Output: ["()()()", "(())()"]
    
    Example 2:
    Input: "(a)())()"
    Output: ["(a)()()", "(a())()"]
    
    Example 3:
    Input: ")("
    Output: [""]
     * */
    class Solution {
        /*
        * solution: BFS, Time complexity:O(2^n), Space complexity:O(2^n)
        * */
        fun removeInvalidParentheses(s: String): List<String> {
            val result = ArrayList<String>()
            val visited = HashSet<String>()
            val queue = LinkedList<String>()
            queue.offer(s)
            while (queue.isNotEmpty()) {
                val cur = queue.poll()
                if (visited.contains(cur)) {
                    continue
                }
                visited.add(cur)
                if (isValidParenthese(cur)) {
                    result.add(cur)
                }
                //if found in this level, no need to loop again
                if (result.size != 0) {
                    continue
                }
                for (i in cur.indices) {
                    if (cur[i] == '(' || cur[i] == ')') {
                        /*
                        check every children
                        * for example:()())(),
                        * children: remove first '('=>)())()
                        * remove the second:')'=>(())()
                        * */
                        val children = cur.substring(0, i) + cur.substring(i + 1, cur.length)
                        queue.offer(children)
                    }
                }
            }
            //println(result)
            return result
        }
    
        private fun isValidParenthese(s: String): Boolean {
            var count = 0
            for (c in s) {
                if (c == '(') {
                    count++
                } else if (c == ')') {
                    count--
                }
                if (count < 0) {
                    return false
                }
            }
            return count == 0
        }
    }
  • 相关阅读:
    使用命令安装laravel 项目
    laravel如何输出最后一条执行的SQL
    Laravel5.4 队列简单配置与使用
    PHP使用RabbitMQ实例
    初识RabbitMQ,附RabbitMQ+PHP演示实例
    Laravel 5.3 单用户登录的简单实现
    redis+thinkphp5的注册、登陆、关注基础例子
    Laravel 5.3 单用户登录的简单实现
    php面试题汇总
    (转)php读取文件使用redis的pipeline导入大批量数据
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13364038.html
Copyright © 2020-2023  润新知