题解 | #括号匹配#

括号匹配

http://www.nowcoder.com/questionTerminal/a7893dd4b25a433392b9d75ce224dfcd

括号匹配

题目来源:牛客网
题目链接:括号匹配

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M

题目描述

给定一个只包含括号的字符串,判断字符串是否有效。其中,括号种类包含: ‘(’,’)’,’{’,’}’,’[’,’]'。有效字符串需满足:1) 左括号必须用相同类型的右括号闭合;2)左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串


示例1

输入

"{[]}"

输出

true

示例2

输入

"([)]"

输出

false

示例3

输入

"([]"

输出

false

思路

首先这里有一个字符串,把它转换成Array形式,然后定义一个空栈,遇到正括号就push进去(入栈),遇到反括号就判断栈顶元素是不是它的“对象”,是就把栈顶元素pop()掉(出栈),不是就直接false了,最后判断栈是否为空。
理解了之后,就跟玩消消乐似的。


题解

  • javascript V8版
    //括号匹配
    let a = readline().split('')
    // let a = '([]'.split('')
    let b = new Array()
    let flag = 0
    for (let i = 0; i < a.length; i++) {
    if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
      b.push(a[i])
    } else {
      if (a[i] == ')') {
        if (b[b.length - 1] == '(') {
          b.pop()
        } else {
          flag = 1
          break
        }
      }
      if (a[i] == ']') {
        if (b[b.length - 1] == '[') {
          b.pop()
        } else {
          flag = 1
          break
        }
      }
      if (a[i] == '}') {
        if (b[b.length - 1] == '{') {
          b.pop()
        } else {
          flag = 1
          break
        }
      }
    }
    }
    if (b.length != 0) {
    flag = 1
    }
    if (flag == 0) {
    console.log(true)
    } else {
    console.log(false)
    }
  • 核心代码模式(JavaScript Node版)提交时用的这个哦
    /**
    *
    * @param s string字符串
    * @return bool布尔型
    */
    function IsValidExp(s) {
    // write code here
    let a = s.split('')
    let b = new Array()
    let flag = 0
    for (let i = 0; i < a.length; i++) {
      if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
        b.push(a[i])
      } else {
        if (a[i] == ')') {
          if (b[b.length - 1] == '(') {
            b.pop()
          } else {
            flag = 1
            break
          }
        }
        if (a[i] == ']') {
          if (b[b.length - 1] == '[') {
            b.pop()
          } else {
            flag = 1
            break
          }
        }
        if (a[i] == '}') {
          if (b[b.length - 1] == '{') {
            b.pop()
          } else {
            flag = 1
            break
          }
        }
      }
    }
    if (b.length != 0) {
      flag = 1
    }
    if (flag == 0) {
      return true
    } else {
      return false
    }
    }
    module.exports = {
    IsValidExp: IsValidExp,
    }
JS学习笔记 文章被收录于专栏

让大家不再成为WA自动机

全部评论

相关推荐

2024-12-01 17:09
广东金融学院 Java
程序员鼠鼠_春招版:二本学院考公考研吧,等你27毕业市场都不知道成什么样了
点赞 评论 收藏
分享
2024-12-16 10:44
北京邮电大学 Java
之前说过如果拿到美团offer就把这么多轮的面试经验全写出来先说一下本人的经历有9个部门约面,2次拒面,4次二面挂,1次hr面挂,2次一面挂9月初做完笔试,隔了一周,优选约面了,秋招第一面,面的很差,没有准备好,手撕sql没写出来,另一道手撕写的不太好,果不其然一面挂9.30金服约面,这次面试全是八股,此时我的八股水平相当一般,每次深挖都不会,手撕是合并两个升序链表,一面寄过完国庆回来半个月美团再没约面过了知道10.20左右,SaaS部门约面这下就开启了我的噩梦循环,一面面评很不错,二面面试官问了在滴滴实习的限流的底层原理,实习的时候就没太看懂,面试的时候答的不好,但是侥幸二面过了,hr面的时候面试官问对大厂的印象,直接胡说八道了,过了三天人才库月底又面一轮到家二面问了很多场景题,答的都不太好,面试官提醒才能理清思路,面完就挂了走完这一轮面试已经11月了,11月更是噩梦循环,3次二面挂,可能因为之前有终面挂的经历面评还不错首先是美团平台,这个印象不深,自我感觉答的还可以,面试官也聊的不错,最后挂了,给面试官发邮件问了,面试官说前面的人接了offer,没有hc了遂挂然后就是我最想去的部门和base,成都的到家做营销业务的,面试很顺利,二面面试官是我的老乡,面完又开始紧张等待结果,还是挂了最后是核心本地平台做对内的系统的,可能还不如手里的保底offer,最后也不太想去,但是还是面了,二面挂,想不通时间到了12月,我的心态也是出奇的好,这个时候又陆陆续续有两个部门约面,但是心态已经很疲惫了,加上业务也不好,直接拒面了,每次来来回回都是半个月,很耽误时间,上周目前这个部门约面,一开始说周五面试,后面面试官有事又改到这周一,最后因为主管要出差,直接约面的第二天就面试了,两轮面完,第二天就oc了,谈薪没a动,但是也收到了正式offer,感觉也还能接受,剩下等等阿里和邮储就差不多签了一些面试tips1.这几次面试挂都是3天人才库,我看网上有的是长时间没有操作回的,可以问问面试官,有时候会捞回去2.美团面试是我秋招面试里最爱问八股的,一定要好好准备,问的也不难3.美团大部分技术面都有手撕,有时候会让写sql,没准备过,遇到一次寄4.很神奇每次面试碰到问最近看什么书这个问题的都挂了,感觉问这种问题就是面试官已经对你不感兴趣但是还要凑时长5.面试一定要好好准备,面了13次面试每次都有新的不会的点,一面八股居多,也看面试官,场景题最好也准备准备,普通八股是基础,一些中间件的原理也得知道6.坚持一定有好结果
甜美的牛牛在写bug:下载美团外卖没绷住
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务