20.有效的括号

/**
 * 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
 */
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
    let arr = s.split('')
    // 如果长度不是2的倍数
    if (arr.length % 2 !== 0) {
        return false
    }
    let rightToLeft = {
        ')': '(',
        ']': '[',
        '}': '{'
    }

    let stack = []
    
    while (arr.length > 0) {
        let s = arr.shift()
        // 如果是左括号,入栈
        if (['(', '[', '{'].includes(s)) {
            stack.push(s)
        }
        // 如果是右括号,和栈最后一个元素比较是否匹配
        if ([')', ']', '}'].includes(s)) {
            let left = stack.pop()
            if(left === rightToLeft[s]) {
                continue
            } else {
                return false
            }
        }
    }
    return stack.length === 0
};

var isValid = function (s) {
    let arr = s.split('')
    // 如果长度不是2的倍数
    if (arr.length % 2 !== 0) {
        return false
    }
    let rightToLeft = {
        ')': '(',
        ']': '[',
        '}': '{'
    }

    let stack = []
    
    while (arr.length > 0) {
        let s = arr.shift()
        if(stack.length === 0) {
            stack.push(s)
        } else {
            let left = stack.pop()
            if(left !== rightToLeft[s]) {
                stack.push(left)
                stack.push(s)
            }
        }
    }
    return stack.length === 0
};

console.log(isValid("()[]{}"))
console.log(isValid("{[]}"))
console.log(isValid("([)]"));