有效的括号
js
// 解法一 正则 (效率差)
var isValid = function(s) {
while(s.length){
// 保存替换前的字符串s
let temp = s
// 用正则替换掉所有成对的括号
s = s.replace(/\[\]|\{\}|\(\)/g, '')
// 如果替换后还是原来的,说明字符串没有成对的括号了
if(temp === s) return false
}
return true // s为空字符串,退出循环,说明都是成对的括号
}
js
// 解法二 栈
// 参考:https://leetcode-cn.com/problems/valid-parentheses/solution/zhan-de-jing-dian-ti-shi-yao-shi-hou-ru-c95il/
var isValid = function(s) {
let stack = [] // 栈
// 映射表(反向存放)
let map = {
'}': '{',
')': '(',
']': '[',
}
for(let i of s) {
// map[i]如果是右括号【这里的两个条件不能连着写,否则当只有一对括号的时候走到else里面去了】
if(map[i]) {
// 则从栈里取出一个看是否成对,不成对返回false
if (stack.pop() !== map[i]) return false
}
else stack.push(i) // 如果是左括号直接入栈
}
return stack.length === 0 // 查询栈是否为空
}