// 题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
// 有效字符串需满足: 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 注意空字符串可被认为是有效字符串。
// 示例 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