小于 1 分钟
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
// 1. 奇数长度直接判断为 false (优化步骤)
if (s.length % 2 !== 0) return false;
// 2. 定义括号的映射关系: key 为右括号,value 为对应的左括号
const map = {
')': '(',
']': '[',
'}': '{'
};
// 3. 初始化栈
const stack = [];
// 4. 遍历字符串
for (const char of s) {
// 如果 map[char] 存在,说明当前字符是右括号
if (map[char]) {
const topElement = stack.pop()
// 检查栈顶的左括号是否与当前右括号匹配
if (topElement !== map[char]) {
return false;
}
} else {
// 如果不是右括号,说明是左括号,压入栈中
stack.push(char);
}
}
// 5. 遍历结束后,如果栈为空,说明全部匹配成功
return stack.length === 0;
};