20 有效的括号 
// 题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
// 有效字符串需满足: 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 注意空字符串可被认为是有效字符串。
// 示例 1:
// 输入: "()"
// 输出: true
// 示例 2:
// 输入: "()[]{}"
// 输出: true
// 示例 3:
// 输入: "(]"
// 输出: false
// 示例 4:
// 输入: "([)]"
// 输出: false
// 示例 5:
// 输入: "{[]}"
// 输出: true
js
const leftToRight = {
  '(': ')',
  '[': ']',
  '{': '}'
};
  
const isValid = function (s) {
  if (!s) return true;
  
  const stack = [];
  
  for (const ch of s) {
    if (ch === '(' || ch === '{' || ch === '[') stack.push(leftToRight[ch]);
    else {
      if (stack.length === 0 || stack.pop() !== ch) return false;
    }
  }
  
  return stack.length === 0;
};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
37
38
39
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
37
38
39
- 如果当前字符是左括号('(', '[', '{'),将其对应的右括号( leftToRight[ch])压入栈中。
- 如果当前字符是右括号,检查栈是否为空或栈顶元素是否与当前字符匹配: - 如果栈为空或栈顶元素不匹配,则返回 false。
 
- 如果栈为空或栈顶元素不匹配,则返回 
- 如果栈为空,表示所有括号都匹配,返回 true,否则返回false