https://leetcode-cn.com/problems/validate-stack-sequences/
思路:建立一个辅助栈,无非以下几种情况:
(
1
)
p
u
s
h
e
d
i
=
p
o
p
e
d
j
(1)pushed_i=poped_j
(1)pushedi=popedj,那么直接自增
i
、
j
i、j
i、j即可,相当于进栈后立即出栈;
(
2
)
(2)
(2)栈非空且栈顶元素等于
p
o
p
e
d
j
poped_j
popedj,那么弹出栈顶元素即可;
(
3
)
i
<
p
u
s
h
e
d
.
s
i
z
e
(
)
(3)i<pushed.size()
(3)i<pushed.size(),那么把当前元素压入栈再自增
i
i
i即可;
(
4
)
(4)
(4)非法情况,说明不满足题意。注意这个方法可行的基础是序列中的值不重复。
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int siz1=pushed.size(),siz2=popped.size();
int idx1=0,idx2=0;
stack<int> s;
while(1){
if(idx1<siz1&&idx2<siz2&&pushed[idx1]==popped[idx2])
++idx1,++idx2;
while(!s.empty()&&s.top()==popped[idx2])
s.pop(),++idx2;
if(idx1<siz1)
s.push(pushed[idx1++]);
else
break;
}
return idx2==siz2;
}
};