用栈实际模拟两个进栈和出栈的顺序
策略如下:
结束条件:全部push完,但是栈顶元素不等于popped[j]
转移条件:
如果栈为空,或者栈顶元素不等于popped[j],s.push(pushed[i++])
如果栈不为空并且栈顶元素等于popped[j],s.pop并且j++。
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> s;
for(int i=0,j=0;i<pushed.size()||j<popped.size();){
if(i==pushed.size()&&s.size()>0&&s.top()!=popped[j]) return false;
if(s.empty()||s.top()!=popped[j]) s.push(pushed[i++]);
if(!s.empty()&&s.top()==popped[j]){
s.pop();
j++;
}
}
return true;
}
};