Skip to content

有效的括号

LeetCode-20

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 // 查询栈是否为空
}