20.有效的括号(栈L)

/**
 * @param {string} s
 * @return {boolean}
 */
 var isValid = function (s) {
    const len = s.length
    /*奇数长度直接返回false*/
    if (len % 2) return false
    /*所匹配的字符映射 */
    const map = new Map([
        [')', '('],
        ['}', '{'],
        [']', '['],
    ])
    /**建立栈 */
    let stack = []
    for (let i = 0; i < len; i++) {
        //string charAt比直接下标访问要快
        const si = s.charAt(i)
        const mapSi = map.get(si)
        /**
         * 判断value是否与栈顶元素一致
         * 相同从栈中弹出抵消
         * 不同要将value压入栈中
         * 直到栈中元素全部被抵消 也就是length为0则为true
         */
        if (mapSi) {
            //如果能从Map中找到value
            if (mapSi !== stack[stack.length - 1]) {
                stack.push(mapSi)
                break
            }
            stack.pop()
        } else {
            stack.push(si)
        }
    }
    return stack.length === 0
}

 

posted @ 2021-04-09 13:53  心中有一海  阅读(58)  评论(0编辑  收藏  举报