题目描述及思路解析
输入两个整数序列,第一个序列代表的是栈的压入顺序,判断第二个序列是否为栈的弹出序列。例如,{1,2,3,4,5}是某栈的压入顺序,序{4,5,3,2,1}是该栈的一个弹出序列,而对于{4,3,5,1,2}就不可能是栈的弹出序列。需要一个辅助栈,首先我们将元素入栈,当入栈元素与要弹出的元素相同时,直接弹出,当与要弹出的元素不同时,就将元素先入辅助栈中,直到找到要出栈的元素为止,如果都找到了,说明此序列是栈的弹出序列,如果没找到,就说明此序列不是栈的弹出序列,如下图:
代码实现
bool isPopOrder(vector<int> pushStack, vector<int> popStack)
{
stack<int> mystack;
auto it1 = pushStack.begin();
auto it2 = popStack.begin();
while (it2 != popStack.end())
{
while (mystack.empty() || mystack.top() != *it2)
{
if (it1 == pushStack.end())
{
break;
}
mystack.push(*it1);
it1++;
}
if (mystack.top() != *it2)
{
break;
}
it2++;
mystack.pop();
}
if (mystack.empty())
{
return true;
}
else
{
return false;
}
}