banner
NEWS LETTER

有效括号

Scroll down

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例1:

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

示例2:

1
2
输入:s = "()[]{}"
输出:true

示例3:

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

示例4:

1
2
输入:s = "([)]"
输出:false

示例5:

1
2
输入:s = "{[]}"
输出:true

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

1.字符替换法

想法奇特,该算法效率较低,不建议使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function (s) {
if (s.length % 2) {
return false
}
while (true) {
const sLen = s.length
s = s.replace('()', '')
s = s.replace('[]', '')
s = s.replace('{}', '')
if (sLen === s.length) {
return !sLen
}
}
}

2.「栈」数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function (s) {
if (s.length % 2) {
return false
}
const map = new Map([
[')', '('],
[']', '['],
['}', '{']
])
const stk = []
for (let i of s) {
if (map.get(i)) {
if (stk[stk.length -1] !== map.get(i)) {
return false
} else {
stk.pop()
}
} else {
stk.push(i)
}
}
return !stk.length
}
其他文章