代码随想录训练营day11 |

164 阅读1分钟

有效的括号

题目链接:有效的括号

  • 快手一面遇到过
var isValid = function(s) {
    const stack = []
    for(let i of s) {
        switch(i) {
            case '(':
                stack.push(')')
                break;
            case '{':
                stack.push('}')
                break;
            case '[':
                stack.push(']')
                break;
            default:
                if(stack.pop() !== i) return false
        }
    }
    return !stack.length
};

删除字符串中的所有相邻重复项

题目链接:删除字符串中的所有相邻重复项

var removeDuplicates = function(s) {
    const stack = []
    for(let i of s) {
        if(!stack.length) {
            stack.push(i)
        } else {
            const node = stack.pop()
            if(node === i) continue
            stack.push(node)
            stack.push(i)
        }
    }
    return stack.join('')
};

逆波兰表达式求值

题目链接:逆波兰表达式求值

var evalRPN = function(tokens) {
    const stack = []
    let left = null, right = null
    for(let i of tokens) {
        switch(i) {
            case '+':
                right = Number(stack.pop())
                left = Number(stack.pop())
                stack.push(left + right)
                break;
            case '-':
                right = Number(stack.pop())
                left = Number(stack.pop())
                stack.push(left - right)
                break;
            case '*':
                right = Number(stack.pop())
                left = Number(stack.pop())
                stack.push(left * right)
                break;
            case '/':
                right = Number(stack.pop())
                left = Number(stack.pop())
                stack.push(left / right | 0)
                break;
            default:
                stack.push(i)
        }
    }
    return stack.pop()
};

总结:这3道都是利用辅助栈,遍历实现