今天是小呆刷题的第9天,今天的题目是:力扣(LeetCode)的第20题,有效的括号

题目描述

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

有效字符串需满足:

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

示例:

1
2
3
4
5
输入:s = "()"
输出:true

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

提示:

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

解题思路

小呆做这道题的时候,5分钟内没解出来,果断看评论区和题解。这道题的主流思路是用栈来解决,由于括号都是成对出现的,所以我们可以让左侧的括号入栈,当遇到右侧的括号时,出栈匹配,能匹配到,就接着循环,直到所有括号都匹配完或者出现不匹配为止。在JavaScript中我们很容易用数组模拟一个栈。步骤如下:

  1. 判断s.length是否为双数,如果是单数,直接返回false
  2. 循环字符串,遇到左侧括号就执行入栈
  3. 遇到右侧括号,出栈比对,匹配绩效执行,否则退出循环false
  4. 所有括号匹配完,栈为空,则符合条件

老规矩,上gif图来辅助理解:

有效的括号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let stack = []
for(let item of s) {
case '(':
case '[':
case '{':
stack.push(item)
break
case: ')':
if(stack.pop() !== '(') return false
break
case: ']':
if(stack.pop() !== '[') return false
break
case: '}':
if(stack.pop() !== '{') return false
break
}
return s.length === 0
};

小结

刷题的第9天,每当遇到一个不会的题,其实对于我们来说都是一件好事,这意味着你今天又可以获得一些知识/思路。不管是在工作还是生活中,一定不要觉得自己不行/失败。更多的时候,可能我们只比别人多努力1分钟,就能甩过1000个同龄人!加油吧!

引用

力扣LeetCode的第20题-有效的括号