阅读 135

JavaScript算法题:判断字符串是否括号匹配

一、题目描述:

判断字符串是否括号匹配

  • 一个字符串s可能包含{ } ( ) [ ]三种括号

  • 判断s是否是括号匹配的

  • 如(a{b}c)匹配,而{a(b或{a(b)c)就不匹配

二、思路分析:

数据结构:栈

  • 先进后出

  • API:push pop length

  • 相关的:队列,堆

image.png

  • 栈 VS 数组

  • 栈,逻辑结构,是一个理论模型,不管如何实现,不受任何语言的限制

  • 数组,物理结构,真实的功能实现,受限于编程语言

栈和数组是两回事,数组可以实现栈,链表也可以实现栈

思路

  1. 遇到左括号{ ( [ 就压栈

  2. 遇到右括号} ) ]就判断栈顶,匹配则出栈

  3. 最后判断length是否为0

/**  * @description 括号匹配  * @author 有出路  */  /**   * 判断是否括号匹配   * @param str str   */    /**   *    * @param left 左括号   * @param right 右括号   */ function isMatch(left:string,right:string):boolean{     if(left === '{' && right === '}') return true     if(left === '(' && right === ')') return true     if(left === '[' && right === ']') return true }  function matchBracket(str:string):boolean{      const length = str.length      if(length===0) return true      const stack = []      const leftSymbols = '{(['      const rightSymbols = '})]'      for(let i=0;i < length;i++){          const s = str[i]          if(leftSymbols.includes(s)){              //左括号,压栈              stack.push(s)          }else if(rightSymbols.includes(s)){              //右括号,判断栈顶(是否出栈)              const top = stack[stack.length-1]              if(isMatch(top,s)){                  stack.pop()              }else{                  return false              }          }      }      return stack.length === 0  }  //功能测试  const str = 'abc{}(asdasd)'  console.info(matchBracket(str))


作者:有出路
链接:https://juejin.cn/post/7073104526756020237


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐