20. 有效的括号
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const sl = s.length
// 若数组个数是奇数则不匹配
if (sl % 2) return false
const map = new Map([
[")", "("],
["]", "["],
["}", "{"],
])
let stack = []
for (let i of s) {
const left = map.get(i)
// 判断是否有匹配项
if(left) {
// 若没有匹配项则不匹配。 / at(-1) 获取数组中最后一项
if (stack.at(-1) !== left) return false
// 括号匹配则pop栈顶元素
stack.pop()
} else {
// 没有匹配项则入栈
stack.push(i)
}
}
// 栈为空则匹配
return !stack.length
};