牛客网链接: link.
解题思路:
这道题就是使用一个栈来模拟出栈的可能序列。
明确一点,入栈的pushi肯定会走到空,但是popi是不一定能走到最后的。只要popi走到了最后就说明这是一个合法的序列。
如果pushi和popi位置数据相等,说明入栈之后,马上就出栈了,如果不相等,则可能先入栈了,后面才可能出栈。
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
size_t pushi = 0,popi = 0;
//用入栈的方式来模拟出栈的过程
stack<int> st;
while(pushi < pushV.size())
{
st.push(pushV[pushi]);
//有可能栈已经为空了,此时你在st.top()可能会直接崩
while(!st.empty() && st.top() == popV[popi])
{
++popi;
st.pop();
}
++pushi;
}
//说明popi走到了最后
if(popi == popV.size())
return true;
else
return false;
}
};