输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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<Integer>();
int i=0;//设置一个标记
for(int e : pushed){//遍历数组 pushed
stack.push(e);
while(!stack.isEmpty()&&stack.peek()==popped[i]){//当栈不为空且栈顶元素与弹出序列的元素相等时,就弹出该元素,并将弹出序列的标记++,找下一个要弹出的元素。
stack.pop();
i++;
}
}
return stack.isEmpty();
}
}