结合力扣的一道题和自己总结的规律,我得出了一个快速判断出栈顺序的方法。
例题:出栈顺序是1 2 3,问3 1 2 是否是合理出栈顺序
1.先把入栈循序按照栈的存放图示写成一竖排
3
2
1
2.用笔按照出栈顺序把它连接起来
3.向下划线时没有跨越未链接的数,说明入栈合理
(示例中3到1跨过了2,因此不合理)
特别注意,向上跨越不受影响,例如入栈顺序是1 2 3 时,出栈顺序1 3 2是合理的
原理解析
可以理解为模拟栈和队列的匹配过程,这也是 判断出栈合理性算法 的原理
首先我们需要两个队列和一个栈
然后 把 入栈元素按顺序 加入到 队列1
把 出栈元素按顺序 加入到 队列2
接着 把 队列1的首元素 push(压入)到栈中
1.把栈顶元素和队列2的首元素比较,判断首元素是否相同
2.如果相同,pop(弹出)队列1,2的首元素
如果不同,push(压入)队列1的下一个元素(当前队列1的首元素)
重复1-2步骤,直到队列1的所有元素被压入栈,且栈顶元素与队列2首元素不同。
如果循环结束时栈为空,则出栈顺序合理。
总结
由此可知
向下画线模拟pop的过程(遵循栈的出栈规则,所以只能从栈顶往下依次pop,不能越过元素)
向上画线模拟push的过程(无特殊要求)