https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/
思路:维护一个栈 s t a c k stack stack,假设正在处理 p u s h e d [ i ] 、 p o p e d [ j ] pushed[i]、poped[j] pushed[i]、poped[j],那么显然此时有三种情况: ( 1 ) p u s h e d [ i ] = p o p e d [ j ] (1)pushed[i]=poped[j] (1)pushed[i]=poped[j],那么显然 + + i , + + j ++i,++j ++i,++j即可; ( 2 ) (2) (2) s t a c k stack stack非空且栈顶元素等于 p o p e d [ j ] poped[j] poped[j],那么弹出栈顶并且 + + j ++j ++j即可; ( 3 ) (3) (3)以上两种情况都不满足,那么只能把 p u s h e d [ i ] pushed[i] pushed[i]压入栈中,并 + + i ++i ++i。最后判断一下栈是否为空即可。
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> s;
int i=0,j=0,siz=pushed.size();
while(1)
{
while(i<siz&&j<siz&&pushed[i]==popped[j])//匹配
++i,++j;
while(j<siz&&!s.empty()&&s.top()==popped[j])
s.pop(),++j;
if(i<siz)
s.push(pushed[i++]);
else
break;
}
return s.empty();
}
};