【LeetCode】20. 有效的括号(简单)——代码随想录算法训练营Day11

题目链接:20. 有效的括号

题目描述

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 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)。

收获

学习了栈的应用之一,使用栈进行括号匹配。

你可能感兴趣的:(代码随想录算法训练营,#,LeetCode,栈与队列,算法,代码随想录算法训练营,栈与队列)