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