括号匹配

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

时间限制: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,
    }