leetcode-1249-移除无效的括号

89 阅读1分钟

image.png leetcode原题

解题思路

  • 先将字符串转为数组,方便操作。
  • 遍历数组,如果遇到“(”,就把索引添加到栈中,如果遇到“)”,需要判断。如果栈的长度为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('')
};