JS 刷 Leetcode:20.有效的括号

简介: JS 刷 Leetcode:20.有效的括号

1. 题目

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

 

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

 

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

2. 解法一: 栈

思路:新建一个栈,遇到左括号就入栈,遇到与之相同的就出栈直到最后判断栈是否为空

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
  const l = s.length;
  if (l % 2 === 1) return false;
  const stack = [];
  for (let i = 0; i < l; i++) {
    const c = s[i];
    if (["(", "[", "{"].includes(c)) {
      stack.push(s[i]);
    } else if (c === ")") {
      if (stack.pop() !== "(") return false;
    } else if (c === "]") {
      if (stack.pop() !== "[") return false;
    } else if (c === "}") {
      if (stack.pop() !== "{") return false;
    }
  }
  return stack.length === 0;
};

image.png
复杂度分析:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

3. 解二: 使用Map更优雅

var isValid = function (s) {
  const l = s.length;
  if (l % 2 === 1) return false;
  const stack = [];
  const map = new Map();
  map.set("(", ")");
  map.set("[", "]");
  map.set("{", "}");
  for (let i = 0; i < l; i++) {
    if (map.has(s[i])) stack.push(s[i]);
    else if (!map.has(s[i]) && s[i] !== map.get(stack.pop())) return false;
  }
  return stack.length === 0;
};
相关文章
|
3月前
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
4天前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
|
4天前
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
14天前
|
算法 Python
【Leetcode刷题Python】括号匹配问题
一种解决括号匹配问题的Python实现方法,通过计算给定括号串的所有子串的最长合法括号子序列长度之和来确定权值。
9 0
|
15天前
|
机器学习/深度学习 Python
【Leetcode刷题Python】22. 括号生成
本文介绍了了LeetCode题目22的两种Python编程解决方案,题目要求生成所有可能的且有效的括号组合,包括暴力求解和回溯方法。
11 0
|
15天前
|
Python
【Leetcode刷题Python】20. 有效的括号
LeetCode上题目“20. 有效的括号”的Python解决方案,使用栈数据结构来验证括号序列的有效性。具体实现中,会在栈中预先放置一个特殊字符以避免在弹出操作时出现空栈错误,并通过匹配左右括号来判断括号序列是否有效。
7 0
|
1月前
|
JavaScript
js 区分中英文输入法(如中英文括号)
js 区分中英文输入法(如中英文括号)
23 4
|
1月前
|
JavaScript
js 校验括号——括号不可嵌套且需成对出现
js 校验括号——括号不可嵌套且需成对出现
23 2
|
1月前
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
22 0
|
2月前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
23 1