输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof
此题的解决方法是设计一个辅助栈,压入压入序列,同时与弹出序列中的元素进行比较,若辅助栈的栈顶元素在弹出序列中,则将辅助栈的栈顶元素弹出,直到辅助栈中的元素为空
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
if (pushed.size() == 0 && popped.size() == 0) {
return true;
}
stack<int> sta;
size_t cur = 0;
for (size_t i = 0; i < pushed.size(); ++i) {
sta.push(pushed[i]);
while (!sta.empty() && sta.top() == popped[cur]) {
sta.pop();
++cur;
}
}
if (sta.empty())
return true;
else
return false;
}
};