BM44 有效括号序列 js

解法一(栈):

/**
  * 
  * @param s string字符串 
  * @return bool布尔型
  */
function isValid( s ) {
   let stack = []
   if(s.length === 1){ // 如果字符串就一个字符,必然不会有效,直接返回false
       return false
   }
   for(let i = 0; i < s.length ; i++){  //遍历字符串
      if(s[i] === '(' || s[i] === '{' || s[i] === '['){ //如果是左括号,就入栈
          stack.push(s[i])
      }else if(stack.length > 0){ //如果是右括号,先判断栈是否为空,为空说明没有左括号相匹配,返回false
         if(s[i] === ')' && stack[stack.length-1] === '('){ //如果栈不空,查找栈顶是否和现在的括号相匹配
             stack.pop() //匹配的话,就把对应的左括号出栈
             continue //然后跳过本次循环,不再判断下面的if
         } 
          if(s[i] === '}' && stack[stack.length-1] === '{'){
             stack.pop()
              continue
         } 
          if(s[i] === ']' && stack[stack.length-1] === '['){
             stack.pop()
              continue
         } else {return false} //如果三个括号都配不上,返回false
      } else {return false} //如果是右括号但是栈为空,返回flase
       }
    if(stack.length != 0 ){ //如果遍历结束了,但是栈非空,说明左括号多出来了,返回false
        return false
    }
    return true //不然返回true
   }

module.exports = {
    isValid : isValid
};

运行时间 96ms
占用内存 8584KB

主要思路:
  1. 左括号通通入栈
  2. 如果是右括号,判断栈是否为空,空返回false,非空要判断栈顶是否和当前括号匹配,不匹配也不对
  3. 用continue可以大大节约时间,不用三个右括号都判断一遍
  4. 循环结束了要检查栈是否为空,是否有左括号落单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值