leetcode 1249. Minimum Remove to Make Valid Parentheses(移除最少的无效括号)

Burp靶场实战:JWT签名绕过漏洞分析与利用 本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。 阅读详情

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:

It is the empty string, contains only lowercase characters, or
It can be written as AB (A concatenated with B), where A and B are valid strings, or
It can be written as (A), where A is a valid string.

Example 1:

Input: s = “lee(t©o)de)”
Output: “lee(t©o)de”
Explanation: “lee(t(co)de)” , “lee(t©ode)” would also be accepted.

Example 2:

Input: s = “a)b©d”
Output: “ab©d”

Example 3:

Input: s = “))((”
Output: “”
Explanation: An empty string is also valid.

简单来说就是去除最少的无效括号。即左右括号要成对地匹配。

思路:
方法一:
括号配对一般会想到用stack。
这里stack保存的是左括号的位置,因为左括号多余的话,要把它们删掉,删掉要知道下标吧。
用一个StringBuilder保存 result string, 方便随时修改结果的字符串(input的字符串常量是不能修改的)。

遇到" ( “就在stack中存入下标,我们最后要修改的是result string,怎么判断” ( "在result string中的下标呢?
因为result string是一个一个压入字符保存的,当前长度就是下标。

遇到" ) “,就出栈,同时” ) “保存进result string(匹配的括号)。
如果stack为空,就说明没有与之匹配的” ( “,这时不保存” ) "进result string(等效为已经删掉了)

//33ms
    public String minRemoveToMakeValid(String s) {
        Stack<Integer> stack = new Stack<>();
        StringBuilder result = new StringBuilder();
        
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(ch == '(') {
                stack.push(result.length());
                result.append(ch);
            } else if(ch == ')') {
                if(!stack.isEmpty()) {
                    stack.pop();
                    result.append(ch);
                }
            } else {
                result.append(ch);
            }
        }
        
        while(!stack.isEmpty()) {
            result.deleteCharAt(stack.pop());
        }
        return result.toString();
    }

方法二:
不用stack,仅用一个计数变量left, 来记" ( "有多少个。

先把string转为charArray, 因为input的string常量是不能修改的。

然后遍历一遍charArray,遇到" ( "就left ++计数。

遇到" ) “就left --,当left == 0时,说明没有与它匹配的左括号了,当前” ) “需要删除,
删除的操作是最后一起删,这时先把” ) “改为” * "。

上面的遍历可确保没有多余的" ) “了,但是可能还有多余的” ( “,这时left > 0,
从右到左遍历找出这些多余的” ( “, 也改为” * "。

最后直接在原charArray上修改,把" * "的地方跳过即可。

//8ms
    public String minRemoveToMakeValid(String s) {
        char[] chArr = s.toCharArray();
        int left = 0;
        
        //验证左括号的个数,标记多余的右括号为'*'
        for(int i = 0; i < chArr.length; i ++) {
            if(chArr[i] == '(') {
                left ++;
            } else if(chArr[i] == ')') {
                if(left == 0) {
                    chArr[i] = '*';
                } else {
                    left --;
                }
            }
        }
        
        //标记多余(left>0)的左括号为'*'
        for(int i = chArr.length - 1; i >= 0; i--) {
            if(left > 0 && chArr[i] == '(') {        
                left --;
                chArr[i] = '*';              
            }
        }
        
        //把标记的'*'删掉
        int id = 0;
        for(int i = 0; i < chArr.length; i ++) {
            if(chArr[i] != '*') {
                chArr[id] = chArr[i];
                id ++;
            } 
        }
        
        return new String(chArr).substring(0, id);
    }
简要介绍 | 雷达穿墙成像及其应用场景 本文简要介绍了雷达穿墙成像技术的原理、研究现状、挑战与未来展望,希望能为相关领域的研究与应用提供参考。具有广泛的应用前景。本文将详细介绍雷达穿墙成像的原理,以及其在不同应用场景中的实践。逆时偏移算法(Reverse-Time Migration, RTM)雷达穿墙成像技术是一种先进的遥感技术,具有。的能力,可用于探测室内目标。安全与救援、建筑结构检测等领域。雷达穿墙成像技术的核心原理是。是Green函数,表示从接收点。雷达穿墙成像及其应用场景。雷达穿墙成像及其应用场景。目标识别与定位准确性。 阅读详情

相关推荐

ADS2020实战:手把手教你搭建交叉耦合VCO并分析相位噪声(附避坑指南)

本文以ADS2020软件为例,提供了交叉耦合压控振荡器(VCO)从原理图搭建到相位噪声分析的完整实战指南。详细讲解了核心器件选择、谐波平衡与瞬态仿真的关键设置,并重点剖析了相位噪声的仿真方法与优化方向。文中附有详细的避坑指南,帮助初学者和工程师高效完成VCO设计与仿真验证,避免常见错误。

p5l2m9n4o6q的博客 276

leetcode1249.移除无效的括号

一、前言 主要是因为这道题我没看评论和题解,并且我觉得自己的解法挺有趣,java代码的时间上击败100%,所以想记录一下。 ps:对于用单调栈解的那些题目也很有趣,不过笔记记在本地上了。 二、题目 网址:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses/ 三、解题思路 注意: 在这一道题中,用于模拟栈和接收字符的数组都是同一个。 栈底是数组中索引为 s.length()-1 的位置。接收字符则从字符数组

weixin_44765605的博客 382

ComfyUI全自动换装工作流:从零到一的实战指南

本文提供了一份详细的ComfyUI全自动换装工作流实战指南。从环境配置、模型准备到核心工作流架构的逐步拆解,手把手教你搭建一条高效的AI换装流水线。文章深入解析了从输入、预处理、融合到输出的四步核心逻辑,并分享了关键参数调优与进阶技巧,旨在帮助电商从业者、内容创作者及AI爱好者轻松实现高质量、高效率的“一键换装”。

weixin_29198045的博客 893

Leetcode 1249:移除无效的括号(超详细的解法!!!)

给你一个由 '('、')' 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求: 空字符串或只包含小写字母的字符串 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」 可以被写作 (A) 的字符串,...

coordinate的博客 2639

LVDS信号调试必备:5分钟搞懂Xilinx IDELAYE3的TIME模式校准

本文深入解析了在Xilinx Ultrascale系列FPGA中调试LVDS信号时,如何正确使用IDELAYE3的TIME模式进行精密延迟校准。文章重点阐述了IDELAYCTRL、EN_VTC管脚与校准状态机的协同工作机制,揭秘了内置自校准(BISC)中Align_Delay的影响,并提供了从抽头值计算到实际眼图优化的完整实战方案,帮助工程师快速解决高速接口的时序问题。

joy55的博客 215

C语言实战:最小二乘法在传感器数据校准中的应用(附完整代码)

本文详细介绍了如何使用C语言实现最小二乘法,对传感器数据进行线性校准。通过模拟带噪声的传感器数据,手把手演示了从核心算法实现、参数计算到效果验证的完整流程,并提供了可直接编译运行的完整源码,帮助嵌入式开发者解决传感器数据不准的常见问题,提升系统测量精度。

weixin_28025327的博客 515

【leetcode】301.删除无效的括号 (回溯法,详细解析,java实现)

301. 删除无效的括号 难度困难 删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。 说明: 输入可能包含了除 ( 和 ) 以外的字符。 示例 1: 输入: "()())()" 输出: ["()()()", "(())()"] 示例 2: 输入: "(a)())()" 输出: ["(a)()()", "(a())()"] 示例 3: 输入: ")(" 输出: [""] 解题思路 方法一:回溯 对于这个问题,我们得到了一个由括号组成的表达式,并且表达式中可能有一些错误的括号或额外的括号

Viper的程序员修炼手册 1056

某商场G区火灾自动报警与控制系统设计

某商场G区火灾自动报警与控制系统设计 摘要:随着我国经济建设的迅速发展,人民生活水平不断提高,城市用地日益紧张,促使建筑物正朝着高层化、密集化方向发展。高层建筑的特点决定其火灾的危险性和高层建筑的火灾自动报警系统的重要性,一套完整的火灾自动报警及联动控制系统是高层建筑发生火灾时人们生命财产的有利保障,是能否快速准确地发现火情,把火灾扑灭在萌芽状态的关键所在。文章通过消防设计,论述了火灾自动报警及消...

weixin_44026784的博客 5365

【oj刷题记】【1311】【栈:删除最少无效括号】

【代码】【oj刷题记】【1311】【栈:删除最少无效括号】

bei2002315的博客 304

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 141

【AUTOSAR-COM】-5.2-“Deadline Monitoring超时监控”-2-基于IPdu实现

目录 1 在CFG中配置Deadline Monitoring超时监控 1.1 参数说明 1.2 生成代码差异 2 通过一段测试代码看Deadline Monitoring超时监控 3 使用CAN盒观察Deadline Monitoring实际测试效果 3.1 Case 1:ECU开始工作时,没有收到Frame 3.2 Case 2:ECU工作中,接收的Frame丢失、 4 小结 5 结尾 关键字: DM=Deadline Monitoring超时监控 ComFirstTime...

「汽车电子助手」的博客 1788

去除最少括号输出合法的括号字符串

 今天去福田的一家公司面试,某某奇公司。让我做一道算法题,大概这样: 要求写一个函数,输入参数为一个字符串,含有小写字母和’(’,’)'字符,要求去掉最少的括号是字符串成为一个合法的括号字符串。 例如: 输入"))((" 输出"" 输入"nc(kjn(d)ca))" 输出"nc(kjn(d)ca)“或"nc(kjn(dca))”。  反正就是要让括号能匹配,成对出现。我当时就懵了,因为算法一直没怎么研究,最近几天都是在看cocos引擎部分,昨天还看了android。我知道可以用stack来解决括号匹配的问题

lemon 766

YOLOv8车辆碰撞识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)

随着我国汽车保有量的持续攀升,道路交通事故数量居高不下,车辆碰撞损伤的快速、精准评估已成为交通安全管理、保险理赔定损以及汽车后市场服务中的关键环节。传统的人工目视查验方法高度依赖评估人员的专业经验,不仅主观性强、效率低下,而且在复杂光照、多角度遮挡等真实场景下难以保证评估的一致性和可复现性。计算机视觉与深度学习技术的迅猛发展,为目标检测任务提供了强有力的技术支撑,使得基于视觉的车辆损伤自动化识别成为可能。

斌擎科技 128

Leetcode 1249.移除无效的括号(Minimum Remove to Make Valid Parentheses)

Leetcode 1249.移除无效的括号 1 题目描述(Leetcode题目链接)   给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求: 空字符串或只包含小写字母的字符串 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」 可以被写作 (A) 的字符串,其中 A 是一个有效的

qq_39378221的博客 343

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode 1249. Minimum Remove to Make Valid Parentheses解题报告(python)

1249. Minimum Remove to Make Valid Parentheses Minimum Remove to Make Valid Parentheses python solution 题目描述 Given a string s of ‘(’ , ‘)’ and lowercase English characters. Your task is to remove th...

Orientliu96的博客 1615

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode 1249 Minimum Remove to Make Valid Parentheses

思路:首先遇到括号匹配的题,肯定是栈的问题。一般这种问题都是,左括号进去,右括号进去之后pop出来。我肯定是要知道那些不符合规定的括号在哪里。那自然而然栈里面我需要存放下标,对于不符合规定的右括号,我入栈的时候就要判断然后要mark一下,对于不符合规定的左括号就是留在栈里面的那些元素。那我第二遍扫描的时候肯定就要替换成某个marker, 最后把marker去掉,完事儿。题目意思:给定一串字符串,有左括号和右括号,输出任意能匹配上括号的字符串。

xxxmmc的博客 303

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

leetcode - 1249. Minimum Remove to Make Valid Parentheses

leetcode-1249

sinat_41679123的博客 1065

LeetCode-1249. Minimum Remove to Make Valid Parentheses

Given a stringsof'(',')'and lowercase English characters. Your task is to remove the minimum number of parentheses ('('or')',in any positions ) so that the resultingparentheses stringis ...

reigns的博客 611

1249. 移除无效的括号

给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求: 空字符串或只包含小写字母的字符串 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」 可以被写作 (A) 的字符串,其...

然后就去远行 692

LeetCode1249. 移除无效的括号

给你一个由 '('、')' 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 '(' 或者 ')'(可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。

grllery的博客 513

leetcode 1249. Minimum Remove to Make Valid Parentheses 移除无效的括号

Problem:一个栈,一个空字符串ret,空字符串ret用来保存字母、暂时有效的括号,栈用来保存括号和在字符串ret内的索引若栈顶(且当前),直接pop掉,且ret += ),若当前(则push且ret += (若栈空且当前),则continue无效括号的最后还在栈内的,就是没有匹配起来的无效括号,此时需要用erase删除掉。

邹九的个人博客 114

LeetCode 1249. Minimum Remove to Make Valid Parentheses - FB高频题1

首先要搞清楚左右小括号的匹配原则,当遇到一个左括号时,后面必须要有一个右括号才能匹配,要是直到最后也没出现右括号则该左括号为无效需被删除;当遇到一个右括号时,其前面必须要有一个等着匹配的左括号,否则该右括号为无效需要被删除。

hgq522的博客 702

LeetCode_Stack_1249. Minimum Remove to Make Valid Parentheses 移除无效的括号(Java)【栈,字符串处理】

一,题目描述 英文描述 中文描述 示例与说明 二,解题思路 三,AC代码 C++ Java 四,解题过程 第一博 左右各扫描一遍,分别删除多余右括号、左括号,字符串处理在调试的时候废了点时间 第二搏 ...

&再见萤火虫&的博客 260

【Leetcode】【240406】1249. Minimum Remove to Make Valid Parentheses

其实大部分是东京时间第二天凌晨才做的- -但国际服刷新比较晚BGM:刀剑如梦。

君の頭は辉いてるかい? 344

LeetCode-Python-1249. 移除无效的括号(字符串 + 栈)

给你一个由 '('、')' 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 '(' 或者 ')'(可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下任意一条要求: 空字符串或只包含小写字母的字符串 可以被写作AB(A连接B)的字符串,其中A和B都是有效「括号字符串」 可以被写作(A)的字...

Keep Coding 1065

301、删除无效的括号(2021-10-27)

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

weixin_42124486的博客 419
上一篇: 详解LK光流法(含金字塔多层光流),反向光流法(附代码)
下一篇: leetcode 71. Simplify Path(简化路径)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

蓝羽飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值