「每日LeetCode」2023年2月23日

本文最后更新于:2023年3月19日 晚上

20.有效的括号

20.有效的括号

Category Difficulty Likes Dislikes
algorithms Easy (44.53%) 3588 -

Tags
Companies
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:

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

示例 1:
输入:s = “()” 输出:true
示例 2:
输入:s = “()[]{}” 输出:true
示例 3:
输入:s = “(]” 输出:false

提示:

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

Discussion | Solution

思路

函数使用 for…of 循环遍历输入字符串中的每一个字符,使用 switch 语句判断当前字符是左括号还是右括号,如果是右括号,则从栈中取出最后一个左括号,如果不匹配则返回 false,如果匹配则将左括号从栈中弹出;如果是左括号,则将其推入栈中。
最后,判断栈中是否还有剩余的括号,如果有,则说明输入的字符串中的括号不匹配,返回 false,否则返回 true。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
* @lc app=leetcode.cn id=20 lang=javascript
*
* [20] 有效的括号
*/

// @lc code=start
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
const stack = [];
for (const char of s) {
switch (char) {
case ")":
if (stack[stack.length - 1] !== "(") return false;
stack.pop();
break;

case "]":
if (stack[stack.length - 1] !== "[") return false;
stack.pop();
break;
case "}":
if (stack[stack.length - 1] !== "{") return false;
stack.pop();
break;
default:
stack.push(char);
break;
}
}
return stack.length === 0;
};
// @lc code=end