题目:
给定 pushed 和 popped 两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。
示例:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
思路:
第一步:首先判断两个 入栈和出栈序列的长度是否相等,若不相等,直接返回false
第二步:定义一个栈stack,然后遍历pushed,让pushed中的元素进栈,在判断stack的栈顶元素与popped的元素是否相等,若相等,则stack进行弹栈,index后移指向下一个元素在进行判断; 若不相等,则pushed的元素继续入栈。
第三步:循环结束后,只需判断stack是否为空,若为空,则返回true;若不为空,则返回false。
代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
if(pushed.length!=popped.length){
return false;
}
Stack<Integer> stack = new Stack();
int index=0;
for(int i=0;i<pushed.length;i++){
stack.push(pushed[i]); //进栈元素
//若栈为空,则不需要在进行判断,栈顶元素和index所指元素相等,则进行弹栈,index后移
while(!stack.empty() && stack.peek()==popped[index]){
stack.pop();
index++;
}
}
//栈为空,返回true;否则为false
if(stack.empty()){
return true;
}
return false;
}
}