题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列
思路解析:
先判断是否为空 以及压栈序列和出栈序列长度是否一致
然后创建一个栈 用一个for循环 每次往栈里面压入一个元素
就去判断当前栈顶的元素和出栈序列的当前元素是否相等
如果相等,那么当前栈顶元素出栈 且出栈序列往后移动一位,直到栈为空或者栈顶元素和出栈序列当前元素不等
然后继续执行for循环 压入另一个元素
for循环执行完毕后判断出栈序列是否为空 如果为空则返回true 否则返回false
例1:
入栈序列为1,2,3,4,5 出栈序列为 4,5,3,2,1
开始因为栈顶元素和出栈序列当前元素4不等
则for循环执行四次压入1,2,3,4
然后栈顶元素和出栈序列的当前元素相等 那么stack pop出栈顶元素 出栈序列当前元素后移
因为栈顶元素此时为4 和 出栈序列当前元素5不相等 则继续执行for循环 5压栈
再次比较相等 栈顶元素pop 出栈序列当前元素后移
然后 3 3 2 2 1 1
最后stack为空返回true
例2:
入栈序列为1,2,3,4,5 出栈序列为4,3,5,1,2
开始1,2,3,4压栈 然后栈顶元素和出栈序列的当前元素相等 stack pop栈顶元素 出栈序列后移一位
然后 3 3 相等 再次执行以上操作
此时2 5不等
然后压入5
5 5 相等 stack pop栈顶元素 出栈序列后移一位
2 1 不相等
此时退出while循环 因为for循环也执行完毕了
此时栈中还有两个元素 不为空 return false
代码演示:
![](https://app.yinxiang.com/shard/s46/res/49972126-94b6-4771-bfa0-dfa9a50f93be/QQ%E5%9B%BE%E7%89%8720160413085550.png)