2022-11-17
Leetcode
00

目录

1. 题目
2. 解法一: 栈
3. 解二: 使用Map更优雅

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. 解法一: 栈

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

javascript
/** * @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更优雅

javascript
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; };
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:叶继伟

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!