题目链接:20. 有效的括号
题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
文章讲解:代码随想录
视频讲解:
题解1:栈
思路:遍历字符串,当遇到左括号时,把左括号压入栈中。遇到右括号时,比较右括号和栈顶的左括号是否匹配,如果匹配则将栈顶元素弹出,继续遍历;栈为空或不匹配,则说明括号匹配失败。最后判断栈是否为空,栈为空说明括号匹配;不为空说名有多余的左括号剩下。
/**
* @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)。
收获
学习了栈的应用之一,使用栈进行括号匹配。