leetcode301.删除无效字符
题目
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。
用例
输入:s = "()())()"
输出:["(())()","()()()"]
输入:s = "(a)())()"
输出:["(a())()","(a)()()"]
输入:s = ")("
输出:[""]
求解
/**
* @param {string} s
* @return {string[]}
*/
var removeInvalidParentheses = function(s) {
let mySet = new Set()
let maxlength = 0
let res = []
dfs(0,0,0,s,'')
for(let v of mySet){
if(v.length==maxlength){
res.push(v)
}
}
return res
function dfs(left,right,index,str,curr){
if(right==left){
mySet.add(curr)
maxlength = Math.max(maxlength,curr.length)
}
if(right>left||index==str.length){
return
}
if(str[index]=='('){
dfs(left+1,right,index+1,str,curr+'(')
dfs(left,right,index+1,str,curr)
}else if(str[index]==')'){
dfs(left,right+1,index+1,str,curr+')')
dfs(left,right,index+1,str,curr)
}else{
dfs(left,right,index+1,str,curr+str[index])
}
}
};