栈的压入和弹出序列
题目
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
思路
- 按照压栈序列的顺序执行
- 每次入栈之后,循环判断“栈顶元素=弹出序列的当前元素”是否成立,将符合弹出序列顺序的栈顶元素全部弹出
代码
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<>();
int i = 0;
for(int num:pushed)
{
// 针对入栈顺序
// 对于每一个栈顶元素 对比弹出序列的当前元素
stack.push(num);// 入栈
// 栈不为空 取出栈顶元素 对比弹出序列元素
while(!stack.isEmpty() && stack.peek() == popped[i])
{
// 循环判断与出栈
stack.pop();// 相等的话 直接pop
i++;// 然后匹配下一个弹出序列元素
}
}
return stack.isEmpty();// 如果匹配的话 那么stack一定是空的
}
}