LeetCode第301题——删除无效的括号-BFS解决

Intel Arc显卡玩《三角洲行动》报错?手把手教你修改注册表跳过验证 本文针对Intel Arc显卡用户在运行《三角洲行动》时遇到的驱动验证报错问,提供了详细的解决方案。通过安全修改Windows注册表,添加特定键值以跳过游戏驱动兼容性验证,并结合游戏内图形设置与Intel驱动面板的优化建议,旨在帮助玩家顺利进入游戏并提升游戏帧率与运行稳定性。 阅读详情

删除无效的括号-BFS解决
来源:LeetCode第301题
难度:困难

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。

返回所有可能的结果。答案可以按 任意顺序 返回。

示例一

输入:s = “()())()”
输出:[“(())()”,“()()()”]

示例二

输入:s = “(a)())()”
输出:[“(a())()”,“(a)()()”]

示例三

输入:s = “)(”
输出:[“”]

提示:

  • 1 <= s.length <= 25 s
  • 由小写英文字母以及括号 ‘(’ 和 ‘)’ 组成
  • s 中至多含 20 个括号

解法:

	//判断括号是否有效,如果是有效的括号,最终他的左括号数量和右括号的数量
   //一定是相等的,并且在任何位置左括号的数量一定不能小于右括号的数量
   private boolean isValid(String str) {
       int count = 0;
       for (char ch : str.toCharArray()) {
           if (ch == '(') {
               //遇到左括号加1
               count++;
           } else if (ch == ')') {
               //遇到右括号减1,如果count为负,说明右括号的数量比左括号多,是无效的
               if (--count < 0) {
                   return false;
               }
           }
       }
       return count == 0;
   }
	public List<String> removeInvalidParentheses(String s) {
        List<String> res = new ArrayList<>();//存储返回的结果值
        Queue<String> queue = new LinkedList<>();//存储每层的字符串
        Set<String> set = new HashSet<>();//存储子串,主要用来去重的
        set.add(s);//先把字符串s添加到集合set和队列queue中
        queue.add(s);
        while (!queue.isEmpty()) {
            int levelCount = queue.size();//每一层的字符串数量
            for (int i = 0; i < levelCount; i++) {
                String str = queue.poll();//当前层的字符串出队
                if (isValid(str)) { // 当前字符串是否是有效括号
                    res.add(str);
                }
                //如果当前层出现了有效的字符串,而他的下一层字符串长度只会比他小,所以
                //当出现有效字符串的时候他的下一层我们不需要在判断,否则我们需要继续判断
                if (res.isEmpty()) {
                    for (int j = 0; j < str.length(); j++) {
                        //下一层的字符串,遇到左括号或右括号要删除一个
                        if (str.charAt(j) == '(' || str.charAt(j) == ')') {
                            //截取,每次只删除字符串str中的一个字符
                            String subStr = str.substring(0, j) + str.substring(j + 1);
                            //这里主要是过滤掉重复的,如果集合set中存在字符串subStr
                            //add的时候会返回false,否则会返回true
                            if (set.add(subStr)) {//如果没有重复的就把字符串subStr添加到队列中
                                queue.offer(subStr);
                            }
                        }
                    }
                }
            }
            //如果当前层出现了有效括号,他们肯定是最长有效的,直接返回
            if (res.size() > 0) {
                return res;
            }
        }
        return res;
    }
PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式) 该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)中断(... 阅读详情

相关推荐

字符串】【括号匹配】【广度优先】301. 删除无效括号

给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。

闻缺陷则喜何志丹 900

LeetCode每日一】——301.删除无效括号

给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。

IronmanJay 1539

中学生都能玩的人工智能_open_course_for_AI.zip

中学生都能玩的人工智能_open_course_for_AI

Leetcode301删除无效括号

1.目描述 给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。 返回所有可能的结果。答案可以按任意顺序返回。 示例1: 输入:s = "()())()" 输出:["(())()","()()()"] 示例2: 输入:s = ")(" 输出:[""] 链接:https://leetcode-cn.com/problems/remove-invalid-parentheses/ 来源:力扣(LeetCode) 2.思路分析 这道...

qq_39144436的博客 772

LeetCode每日一301.删除无效括号

301.删除无效括号 给定一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。 示例1: 输入:s = “()())()” 输出:["(())()","()()()"] 示例2: 输入:s = “(a)())()” 输出:["(a())()","(a)()()"] 示例3: 输入:s = “)(” 输出:[""] 思路:1、计算需要去除的括号数; 2、回溯,将leftDeleterightDelete降为0; 3

weixin_46566527的博客 377

leetcode-301. 删除无效括号

ps:加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯。3)回溯,先写终止条件;,删除最小数量无效括号,使得输入字符串有效。2)写一个函数,用来判断当前字符串是否是有效的括号。1)先遍历字符串,分别找到左,右括号的异常个数。给你一个若干括号字母组成字符串。返回所有可能的结果。代码使用的是官方第一种解法。

曼巴的博客 501

LeetCode301 删除无效括号

LeetCode301

sakuraSD的博客 278

力扣301删除无效括号

力扣301删除无效括号,BFS,DFS

sxycylq的博客 219

删除无效括号c语言,LeetCode301 号问删除无效括号

目来源于 LeetCode301 号问删除无效括号。有小伙伴后台留言说这是中山大学计算机考研机试目描述删除最小数量无效括号,使得输入字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( ) 以外的符。示例 1:输入:"()())()"输出:["()()()","(())()"]示例 2:输入:"(a)())()"输出:["(a)()()","(a...

weixin_42547431的博客 524

LeetCodepython之301. 删除无效括号

给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 示例 1: 输入:s = "()())()" 输出:["(())()","()()()"] 示例 2: 输入:s = "(a)())()" 输出:["(a())()","(a)()()"] 示例 3: 输入:s = ")(" 输出:[""] 提示: 1 <= s.length <= 25 s 由小写英文字母以及括号 '(' ')' 组

qq_55625579的博客 427

leetcode解:第301Remove Invalid Parentheses

https://leetcode-cn.com/problems/remove-invalid-parentheses/ 文章目录解法一、BFS代码解法二、回溯代码解法三、有限制的回溯代码 解法一、BFS要求所有的解,所以我们应当想到用搜索来解决BFS的思想会比较直观: 由目要求易知:所有的解都是由原始字符串删除了相同数量括号得到的 对于删除括号数量i,生成对应的所有的字符串,它们属于第i个level 对于每个level,判断其中的字符串是否有解:若有,则所有的解都来自于这个level;否则

chenf1999的博客 576

C++实现——Remove Invalid Parentheses

//去掉最少的括号,使得字符串合理匹配 /* 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 pa

硅谷 1086

LeetCode301_删除无效括号

本文解析LeetCode301"删除无效括号",提供DFSBFS两种解法。目要求删除最小数量无效括号,使字符串有效。DFS方法统计需删除括号数量后递归搜索,BFS方法逐层删除括号检查有效性。文章包含C#、Python、C++三种实现代码,并详细分析了算法思路时间复杂度。该考察深度优先搜索、字符串处理括号匹配能力,适合想要提升算法技能的开发者练习。

qq_40263592的博客 987

LeetCode-Hot100)301. 删除无效括号

最长递增子序列(LIS)问要求找出数组中严格递增子序列的最大长度。本文介绍了两种解法:1)动态规划法(O(n²)),通过维护dp数组记录以每个元素结尾的LIS长度;2)更高效的贪心+二分法(O(n log n)),利用tails数组存储各长度子序列的最小末尾元素,通过二分查找维护。两种方法均通过示例验证,其中后者适用于大规模数据。关键点在于理解动态规划的状态转移贪心策略中tails数组的性质维护。

小飞的博客 1050

BFS删除无效括号

LeetCode 301 删除无效括号 删除最小数量无效括号,使得输入字符串有效,返回所有可能的结果。 说明: 输入可能包含了除 ( ) 以外的符。 示例 2: 输入: "(a)())()" 输出: ["(a)()()", "(a())()"] 为何用BFS而不是DFS 利用BFS理解起来要远远比DFS要简单的多,因为这道说的是删除最少的括号!!,如果我们每次只删除一个括号,然后观察被删除一个括号后是否合法,如果已经合法了,我们就不用继续删除了啊。因此我们并不需要将遍历进行到底,而是层层深入

AndyJ的学习之旅 339

【递归 &回溯】LeetCode-301. 删除无效括号

给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。时间复杂度:O(2^n * n)满足有效括号序列的性质。空间复杂度:O(n)

xiaoxiawancsdn的博客 669

LeetCode练习与总结:删除无效括号--301

本文详细介绍了如何通过深度优先搜索剪枝策略解决删除无效括号,分析了时间复杂度空间复杂度,并总结了涉及的算法数据结构知识点。

一直学习永不止步 1204

LeetCode 301. 删除无效括号字符串,回溯或BFS】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分目有锁,本系列将至少持续到刷完所有无锁之日为止;由于LeetCode还在不断地创建新,本系列的终止日期可能是永远。在这一系列刷文章中,我不仅会讲解多种解思路及其优化,还会用多种编程语言实现解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 661

LeetCode 301. 删除(最少)无效括号(Hard)

目链接 BFS简单而又详细的python讲解 思路 代码 class Solution: ### 0124 BFS(156 ms,15.2 MB) def removeInvalidParentheses(self, s: str) -> List[str]: # 判断当前字符串是否合法 def isValid(s): cnt = 0 for c in s: .

newCraftsman的博客 243

leetcode301周赛

现有一台饮水机,可以制备冷水、温水热水。每秒钟,可以装满2杯类型的水或者1杯任意类型的水。给你一个下标从开始、长度为3的整数数组amount,其中amount[0]amount[1]amount[2]分别表示需要装满冷水、温水热水的杯子数量。返回装满所有杯子所需的秒数。

m0_53201842的博客 855

给你一个若干括号字母组成字符串 s ,删除最小数量无效括号,使得输入字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回

class Solution(object): def removeInvalidParentheses(self, s): """ :type s: str :rtype: List[str] """ if len(s) == 0: return [""] count1 = 0 count2 = 0 for str_num in s: count1 += (str_num=="(") ..

vegeta98的博客 419
上一篇: Git的安装教程
下一篇: 正则表达式
瑞桐曦浩
博客等级 码龄6年 28粉丝 13原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞桐曦浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值