题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
const bracketMap = { ')': '(', '}': '{', ']': '[' }
const stack = [] // 初始化一个空栈
for (const char of s) {
// 如果是右括号 则进入if语句
if (bracketMap[char]) {
// 如果栈里面没有元素或则不匹配,直接返回false
if (stack.pop() !== bracketMap[char]) {
return false
}
} else {
// 左括号进入等待区,等待匹配
stack.push(char)
}
}
// 都匹配成功,栈应该为空
return stack.length === 0
};
总结
此题核心使用的数据结构是栈,记录为匹配的左括号,遵循后进先出原则。括号必须按顺序闭合,遇到右括号时,必须检查最近未闭合的左括号(即栈顶元素)是否匹配。