301.删除无效的括号

301.删除无效的括号

题目

力扣301. 删除无效的括号

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

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

括号匹配

定义l,r两个int变量作为记录左括号和右括号不匹配个数,遍历string s,当遇到左括号时l直接++;遇到右括号的时候r先++,然后判断一下,如果l>0,则r和l都–,代表这个括号匹配了。最后循环结束,如果r+l==0则说明匹配。

for(auto a:s){
            if(a=='('){
                l++;
                ll++;
            }
            else if(a==')'){
                r++;
                rr++;
                if(l>0){
                    l--;
                    r--;
                }
            }
        }

回溯

探索每种情况,并使用剪枝手段降低时间复杂度(否则会超时)。

string s中的每一位符合的括号都需要分为两支:1.加上这一个括号;2.不要这一个括号

采用回溯的方法,遍历每种情况。遍历结束时需要判断,最终得到的目标string需要进一步判断是否时有效的括号。如果是,则加入到vector中。

剪枝

我使用的剪枝交简单,只是读取string s的左右括号的总数,在回溯中每处理一个括号,就将计数-1,如果此时括号的剩余数量小于需要去掉的数量,则这一分支就不用再继续下去了,直接return;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值