Problem: AB3 有效括号序列
题目描述
描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
数据范围:字符串长度 0≤n≤100000≤n≤10000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
输入描述:
输出描述:
示例1
输入:"["
输出:false
解题思路
- 栈和映射表:
stack
用于存储左括号,map
用于存储括号的对应关系。- 遍历字符串:
- 遇到左括号,压入栈中。
- 遇到右括号,检查栈顶元素是否匹配。
- 最终检查:如果栈为空,说明所有括号都匹配成功。
算法流程
代码
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
function isValid(s) {
const stack = [];
const map = {
'(': ')',
'[': ']',
'{': '}'
};
for (let i = 0; i < s.length; i++) {
const char = s[i];
if (char in map) {
stack.push(char);
} else {
if (stack.length === 0) return false;
const top = stack.pop();
if (map[top] !== char) {
return false;
}
}
}
return stack.length === 0;
}
module.exports = {
isValid: isValid
};
复杂度
- 时间复杂度:
添加时间复杂度, 示例:
- 空间复杂度:
添加空间复杂度, 示例: