
栈和数组有什么区别? 没有区别 不是一个概念的东西,
逻辑结构 VS 物理结构
栈 逻辑结构 。理论模型,不管如何实现,不受任何语言的限制
数组 物理结构,真实的功能实现,受限于编程语言
思路
遇到左括号就压栈 压栈的意思就是把括号push到数组的操作 这就叫压栈 或者 进栈
遇到右括号就判断栈顶,匹配则出栈
最后判断length是否为0
- /**
- * @description 括号匹配
- *
- */
- function isMatch(left:string, right:string):boolean{
- if(left === '{' && right === '}') return true
- if(left === '[' && right === ']') return true
- if(left === '(' && right === ')') return true
- return false
- }
-
- 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
- }
分析 : 时间复杂度O(n) 空间复杂度O(n)
空间复杂度O(n) 只有一个数组空间
时间复杂度O(n) 虽然用了includes() 但是我们的leftSymbols 是固定了 可以忽略不记
所以是O(n)