题目链接:20. 有效的括号
给定一个只包括?'('
,')'
,'{'
,'}'
,'['
,']'
?的字符串?s
?,判断字符串是否有效。
有效字符串需满足:
示例 1:
输入:s = "()"
输出:true
示例?2:
输入:s = "()[]{}"
输出:true
示例?3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s
?仅由括号?'()[]{}'
?组成
文章讲解:代码随想录
视频讲解:
思路:遍历字符串,当遇到左括号时,把左括号压入栈中。遇到右括号时,比较右括号和栈顶的左括号是否匹配,如果匹配则将栈顶元素弹出,继续遍历;栈为空或不匹配,则说明括号匹配失败。最后判断栈是否为空,栈为空说明括号匹配;不为空说名有多余的左括号剩下。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
// 如果字符串长度为奇数,说明括号不匹配,直接返回 false
if (s.length % 2 !== 0) {
return false;
}
const stack = [];
const map = { ")": "(", "]": "[", "}": "{"};
for (const c of s) {
if (!map[c]) {
stack.push(c);
} else {
if (stack.length > 0 && map[c] === stack[stack.length - 1]) {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
};
分析:时间复杂度为 O(n),空间复杂度为 O(n)。
学习了栈的应用之一,使用栈进行括号匹配。