HJ31 单词倒排

16 阅读1分钟

Problem: AB3 有效括号序列

题目描述

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

数据范围:字符串长度 0≤n≤100000≤n≤10000

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

输入描述:

输出描述:

示例1

输入:"["

输出:false

解题思路

  1. 栈和映射表stack 用于存储左括号,map 用于存储括号的对应关系。
  2. 遍历字符串
  • 遇到左括号,压入栈中。
  • 遇到右括号,检查栈顶元素是否匹配。
  1. 最终检查:如果栈为空,说明所有括号都匹配成功。

算法流程

代码

    /**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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
};

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(N)O(N)

  • 空间复杂度:

添加空间复杂度, 示例: O(N)O(N)