1.栈(stack)
- 它是一种受限制的线性表,后见先出
- 其限制是仅允许在表的一端进行插入和删除操作,这一段被称为
栈顶
相对地把另一端称为栈底
- LIFO表示就是后进入的元素,带一个弹出栈空间,类似于自动餐托盘最后放上托盘,往往先拿出去使用
- 向一个栈插入新元素又称作
进栈
,入栈
,或者压栈
,他是把新元素放到栈顶元素的上面,使之成为新的栈顶元素 - 从一个栈删除元素又称作
出栈
,或者退栈
,他是把栈顶元素删掉,使其相邻的元素成为新的栈顶元素。
2.栈结构的实现
var longestValidParentheses = function (s) {
let maxLen = 0
let stack = []
stack.push(-1) // 初始化一个参照物
for (let i = 0; i < s.length; i++) {
if (s[i] === '(') {
// ( 入栈 )出栈
stack.push(i)
} else {
// )的情况 出栈
stack.pop()
if (stack.length) {
// 每次出栈 计算下当前有效连续长度
// 如何计算连续长度 当前位置 - 栈顶下标 并取值最大的有效长度
maxLen = Math.max(maxLen, i - stack[stack.length - 1])
} else {
stack.push(i) //栈为空时 放入右括号参照物 表示从这个下标开始 需要重新计算长度
}
}
}
return maxLen
};
利用栈结构解题