JavaScript算法题:判断字符串是否括号匹配
一、题目描述:
判断字符串是否括号匹配
一个字符串s可能包含{ } ( ) [ ]三种括号
判断s是否是括号匹配的
如(a{b}c)匹配,而{a(b或{a(b)c)就不匹配
二、思路分析:
数据结构:栈
先进后出
API:push pop length
相关的:队列,堆
栈 VS 数组
栈,逻辑结构,是一个理论模型,不管如何实现,不受任何语言的限制
数组,物理结构,真实的功能实现,受限于编程语言
栈和数组是两回事,数组可以实现栈,链表也可以实现栈
思路
遇到左括号{ ( [ 就压栈
遇到右括号} ) ]就判断栈顶,匹配则出栈
最后判断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