题目地址(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. 删除无效的括号(预处理的暴力枚举)