/** * @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 }