一、题目描述

二、解题思路
整体思路
可以借助栈来模拟进、出栈过程。如果可以顺利完成整个过程,就说明这个序列是合法的,返回true,反之,就说明这个序列不是合法的,返回false。
具体思路
(1)声明栈st,i指向popped的当前位置,n初始化为popped的size;
(2)遍历pushed数组:
<1>首先,将x进栈;
<2>如果栈不为空且st.top()==popped[i],就执行出栈操作,并使得i++;
(3)如果popped数组可以遍历完,则代表这个序列是一个合法的序列,反之,就是一个不合法的序列,所以只要返回i==n就行;
三、代码实现
cpp
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> st;
int i=0,n=popped.size();
for(auto x:pushed){
st.push(x);
while(st.size()&&st.top()==popped[i]){
st.pop();
i++;
}
}
return i==n;
}
};