前端面试真题,两周刷完100道。3. 判断一个字符串是否括号匹配

104 阅读1分钟

题目

判断一个字符串是否括号匹配, 一个字符串可能包含(){}[] 这三种括号。

思路

每个括号都是成对存在的, 遍历字符串过程中,如果是 左括号就保存起来, 如果是右括号,就看下是否和保存的括号最后一个匹配,不匹配就结束,匹配就删掉最后的括号,如果最后遍历完,保存的内容还有剩余,也是不匹配。

保存括号使用栈, 特点是 后进先出

代码实现

let str = 'oiidj({})jdh'

function isMatch (str) {
  const stack = [];
  let itemMap = {
    ')':"(",
    "}":"{",
    "]":'['
  }
  for (let i=0; i<str.length; i++) {
    let item = str[i]
    if (item==='('|| item==='{' || item==='[') {
      stack.push(item)
    }
    if (item===')'|| item==='}' || item===']') {
      let enditem = stack.pop()
      if (enditem != itemMap[item]) {
        return false
      }
    }
  }
  return !stack.length
}

console.log(isMatch(str))

复杂度分析

  • 时间复杂度 在代码中使用了一次循环遍历, 时间复杂度为O(n)
  • 空间复杂度 创建了一个数组 stack 长度可能是 传入字符串的长度, 空间复杂度为O(n)

2周刷完100道前端优质面试真题 更多视频及资料领取请关注:奋斗的刚子