解题思路
- 创建一个栈来进行后续操作
- 遍历入栈操作,将每一个元素入栈
- 每次入栈完成后判断栈顶元素是否等于出栈序列第一个元素,如果不等,继续入栈。如果相等,则删除出栈序列的第一个元素,并将栈顶元素弹出,直到栈顶元素不等于出栈序列第一个元素
- 重复以上过程,直到所有入栈操作完成
- 此时如果栈为空,且出栈序列为空,则说明所有出栈操作都可以完成,且是在最初空栈上进行的,返回
true。
否则说明不是,返回 false
var validateStackSequences = function(pushed, popped) {
// 创建空栈
const stack = [];
// 遍历入栈操作序列
for(let i = 0;i<pushed.length;i++){
// 将每一个元素入栈
stack.push(pushed[i])
// 当栈不为空且栈顶元素等于出栈操作序列的第一个元素时
while(stack.length && stack[stack.length-1]===popped[0]){
// 栈顶元素弹出
stack.pop();
// 出栈操作序列第一个元素删除
popped.shift();
}
}
// 如果栈为空且出栈序列为空,则说明两个操作序列是在空栈基础上匹配的操作序列
return stack.length===0 && popped.length===0
};