题目描述
给定 pushed
和 popped
两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true
;否则,返回 false
。
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解题思路
考察堆栈,那么就用堆栈模拟咯。(借用“辅助栈”)
我的实现
// 考察堆栈,那么就用堆栈模拟咯
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
if(pushed.size() == 0 && popped.size() == 0)
return true;
stack<int> s; // 用于入栈操作
//用于标识弹出序列的位置
int popIndex = 0;
for(int i = 0; i < pushed.size(); i++){
s.push(pushed[i]);
//如果栈不为空,且栈顶元素等于弹出序列
while(!s.empty() && s.top() == popped[popIndex]){
//出栈
s.pop();
//弹出序列向后一位
popIndex++;
}
}
return s.empty();
}
};