解法:迭代+栈操作
思路: 第一步:先将字符串转为数组,方便操作。 第二步:遍历数组,如果遇到“(”,就把索引添加到栈中,如果遇到“)”,需要判断。如果栈的长度为0,则为无效反括号,直接置为空(方便后面join删除),如果栈中有值,则栈顶出栈。 第三步:循环完后如果栈长度不为0,则说明有多余的"(", 遍历栈,并从数组中将该索引元素置为空。 第四步:返回join('')后的字符串
var minRemoveToMakeValid = function(s) {
// 第一步
let stack = []
let arr = s.split('')
// 第二步
for(let i = 0; i < arr.length; i++) {
if (arr[i] === '(') {
stack.push(i)
}
if (arr[i] === ')') {
if (stack.length <= 0) {
arr[i] = ''
} else {
stack.pop()
}
}
}
// 第三步
for (let i = 0; i < stack.length; i++) {
arr[stack[i]] = ''
}
// 第四步
return arr.join('')
};