题目地址(301. 删除无效的括号)

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目地址(301. 删除无效的括号)相关的知识,希望对你有一定的参考价值。

题目地址(301. 删除无效的括号)

https://leetcode-cn.com/problems/remove-invalid-parentheses/

题目描述

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

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

 

示例 1:

输入:s = "()())()"
输出:["(())()","()()()"]


示例 2:

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


示例 3:

输入:s = ")("
输出:[""]


 

提示:

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

前置知识

公司

  • 暂无

思路

关键点

代码

  • 语言支持:Java

Java Code:


class Solution 

        Map<Integer,Integer> mapR = new HashMap<>();
        public List<String> removeInvalidParentheses(String s) 
            char[] data = s.toCharArray();
            Set<String> res = new HashSet<>();
            res.add("");
            for (int index = data.length-1; index >= 0; index--) 
                mapR.put(index,mapR.getOrDefault(index+1,0)+(data[index]==')' ? 1:0));
            
            int max = search(data,0,new StringBuffer(),0,0,res);
            List<String> r = new ArrayList<>();
            for(String item : res)
                if(item.length() == max)
                    r.add(item);
            
            return r;
        

        int search(char[] data, int index, StringBuffer buf, int lCount, int rCount, Set<String> res) 
            if(index == data.length)
                return 0;
            
            int max = search(data,index+1,buf,lCount,rCount,res);

            if(data[index] == ')')
                rCount++;
                if(lCount < rCount)
                    return max;
                
            else if(data[index] == '(' )
                lCount++;
            

            if(lCount - rCount > mapR.getOrDefault(index+1,0))
                return max;

            buf.append(data[index]);
            if(lCount == rCount)
                res.add(buf.toString());
                max = Math.max(buf.length(),max);
            
            max = Math.max(search(data, index + 1, buf, lCount, rCount, res), max);
            buf.deleteCharAt(buf.length()-1);
            return max;
        

    

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于题目地址(301. 删除无效的括号)的主要内容,如果未能解决你的问题,请参考以下文章

Leecode 301. 删除无效的括号——Leecode每日一题系列

leetcode打卡--301. 删除无效的括号(预处理的暴力枚举)

leetcode困难301删除无效的括号

leetcode困难301删除无效的括号

LeetCode 496. 下一个更大元素 I / 301. 删除无效的括号 / 869. 重新排序得到 2 的幂

LeetCode 301 删除无效的括号[dfs 字符串] HERODING的LeetCode之路