给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。
示例 1:
输入:s = “()())()” 输出:[“(())()”,“()()()”] 示例 2:
输入:s = “(a)())()” 输出:[“(a())()”,“(a)()()”] 示例 3:
输入:s = “)(” 输出:[“”]
提示:
题意让我们删除括号使得剩下的括号匹配,要求我们删除最少的括号数,并且要求得到所有的结果。我们可以使用回溯算法,尝试遍历所有可能的去掉非法括号的方案。
可以先统计出左括号的数量和右括号的数量,然后利用括号匹配的规则,计算出要最少删除的左括号和右括号的数量,然后我们尝试在原字符串 s 中去掉该数量的左括号和右括号,然后检测剩余的字符串是否合法匹配,如果合法匹配则我们则认为该字符串为可能的结果。
题目中要求最少删除,这样的描述正是广度优先搜索算法应用的场景,并且题目也要求我们输出所有的结果。我们在进行广度优先搜索时每一轮删除字符串中的 1 个括号,直到出现合法匹配的字符串为止,此时进行轮转的次数即为最少需要删除括号的个数。
我们进行广度优先搜索时,每次保存上一轮搜索的结果,然后对上一轮已经保存的结果中的每一个字符串尝试所有可能的删除一个括号的方法,然后将保存的结果进行下一轮搜索。在保存结果时,我们可以利用哈希表对上一轮生成的结果去重,从而提高效率。
【数据结构】第三章——栈、队列与数组详细介绍栈在括号问题中的应用
一、题目描述给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]二、解题思路重点概括:如果解决一个问题有多个步骤,每一个步骤有多种方法,题目又要我们找出所有的方法,可以使用回溯算法;回溯算法是在一棵树上的 深度优先遍历(因为要找所有的解,所以需要遍历);组合问题,相对于排列问题而言,不计较...
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做 删除无效的括号Given a string s that contains parentheses and letters, remove the minimum number of i
删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除(和)以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:输入: ")("输出: [""]思路:回溯搞一搞啦,剪枝的一点是如...
器,遇到左括号++,右括号--,一旦count小于0,就说明不
问题描述给定一个由 '('、')' 和小写字母组成的字符串 S,你需要找出 S 中的所有有效的括号子串,并返回任意一个(或空字符串)。有效的括号子串是指符合有效括号表达式的子串,即任何时候左括号的数量都不会超过右括号的数量。示例 1:输入: "()"输出: "()"示例 2:输入: ")("输出: ""
20. 有效的括号 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例
1046. 最后一块石头的重量有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将
"题目" DP 险过。 dp[i][j] :means it need remove at least dp[i][j] characters to get vaild parenthese from position i to postion j in string. vector str[i][
32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 思路一:借助栈 思路
HOT 100【LeetCode】
301. 删除无效的括号删除最小数量的无效括...
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 示例 1: 输入:s = "()())()"输出:["(())()","()()()"]示例 2: 输入:s = "(a)())()"输出:["(a())() ...
本文介绍了五个Java编程解题案例,涵盖字符串处理、贪心算法、动态博弈等知识点每个案例都包含解题思路、完整代码和涉及的知识点
在自动驾驶场景下,摄像头 + 激光雷达的传感器融合方案是最常见的感知技术路线,目标是充分利用二者的互补性: 摄像头优势:分辨率高、纹理丰富、颜色信息齐全,有利于识别语义信息(车道线、交通灯、行人类别等)。 激光雷达优势:天然地具有深度信息,直接测得高精度距离和稠密点云,有利于构建 3D 几何结构和检 ...
前言 Linux是一个通用操作系统的内核,她的目标是星辰大海,上到网络服务器,下至嵌入式设备都能运行良好。做一款好的linux进程调度器是一项非常具有挑战性的任务,因为设计约束太多了: 它必须是公平的 快速响应 系统的throughput要高 功耗要小 3.8版本之前的内核CFS调度器在计算CPU ...
DFS 序 DP:与合并子树的树形背包相对。 状态设计通常为 \(dp(i,S)\) 表示考虑了 dfs 序的前 \(i\) 个点,各种状态为 \(S\) 的某种属性。 优势:每次只新加入一个点。 劣势:要处理往回跳的情况(dfs 序增加 \(1\),可能是切换子树了)。 常用优化技巧:重链剖分,在 ...