【Leetcode刷题篇】leetcode301 删除无效的括号
发布日期:2021-06-29 15:35:35
浏览次数:3
分类:技术文章
本文共 2074 字,大约阅读时间需要 6 分钟。
删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。
说明: 输入可能包含了除 ( 和 ) 以外的字符。
示例 1:
输入: “()())()” 输出: ["()()()", “(())()”]
示例 2:
输入: “(a)())()” 输出: ["(a)()()", “(a())()”]
示例 3:
输入: “)(” 输出: [""]
回溯算法:
递归的状态现在由五个不同的变量定义:
- 1.
index
它表示我们必须在原始字符串中处理的当前字符。- 2.
left_count
它表示添加到为我们正在构建的表达式中的左括号数- 3.
right_count
它表示添加到我们正在构建的表达式中的右括号数- 4.
left_rem
是要要删除的左括号数- 5.
right_rem
表示保留要删除的右括号数。总的来说,为了使最终表达式有效,left_rem==0
和right_rem==0
.- 当我们决定不考虑括号时,即删除括号,不管是左括号还是右括号,我们也必须考虑它们相应的剩余计数。这意味着,如果
left_rem>0
,我们只能放弃左括号;同样,对于右括号,我们将检查right_rem>0
.- 检查括号没有变化。只有丢弃圆括号的条件才会改变
- 表达式再基本情况下有效的条件现在将变为left_rem0 and right_rem0。注意,我们不必再检查left_count==right_count了,因为在有效表达式的情况下,在递归结束时,我们会删除所有放错位置或无效的括号。所以,只有当
left_rem==0
andright_rem==0
时,我们才需要检查。
class Solution { private SetvalidExpressions = new HashSet (); public List removeInvalidParentheses(String s) { // 记录 int left = 0, right = 0; // 开始遍历 for(int i=0;i 0?left-1:left; } } this.recurse(s,0,0,0,left,right,new StringBuilder()); return new ArrayList (this.validExpressions); } private void recurse( String s, int index, int leftCount, int rightCount, int leftRem, int rigtRem, StringBuilder expression) { if(index == s.length()) { if(leftRem==0&&rigtRem==0) { this.validExpressions.add(expression.toString()); } }else { char character = s.charAt(index); int length = expression.length(); if((character=='(' && leftRem>0) || (character==')'&&rigtRem>0)) { this.recurse(s, index+1, leftCount, rightCount, leftRem-(character=='('?1:0), rigtRem-(character==')'?1:0), expression); } expression.append(character); if(character!='('&&character!=')') { this.recurse(s, index+1, leftCount, rightCount, leftRem, rigtRem, expression); }else if(character=='(') { this.recurse(s, index+1, leftCount+1, rightCount, leftRem, rigtRem, expression); }else if(rightCount
转载地址:https://codingchaozhang.blog.csdn.net/article/details/111655979 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月13日 12时08分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL 安装教程(无脑版)
2019-04-29
IDEA 怎么删除一个Module
2019-04-29
走进数据科学:最好是通过比网课更好的方法
2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网
2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧
2019-04-29
效率提升法则:高效人士不会去做的4件事
2019-04-29
8.PostgreSQL约束
2019-04-29
【技术分享】使用AES加密技术保障数据安全
2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼!
2019-04-29
数据可视化工具:Matplotlib绘图
2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天
2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥
2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽
2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早
2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班
2019-04-29
【Python爬虫实战】为何如此痴迷Python?还不是因为爱看小姐姐图
2019-04-29
零基础自学Python,你也可以实现经济独立!
2019-04-29