输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。
假设压入站的所有数字均不相等。
例如序列1,2,3,4,5是某站的压栈序列,序列4,5,3,2,1是该压栈序对应的一个弹出序列,但是4,3,5,2,1
就不是该压栈序列的弹出序列。
解决这个问题,我们需要一个辅助栈,把输入第一个序列的数字依次压入该辅助栈,并按照第二个序列
的顺序依次从该栈中弹出数字。
代码的实现:
#include<iostream>
using namespace std;
#include<assert.h>
#include<stack>
bool IsPopOrder(const int* pPush, const int* pPop, size_t length)
{
assert(length);
assert(pPush && pPop);
bool possible = false;
const int* NextPush = pPush;
const int* NextPop = pPop;
stack<int> s;
while (NextPop - pPop < length)
{
while (s.empty() || s.top() != *NextPop)
{
if (NextPush - pPop == length)
{
break;
}
s.push(*NextPush);
NextPush++;
}
if (s.top() != *NextPop)
{
break;
}
s.pop();
NextPop++;
}
if (s.empty() && NextPop - pPop == length)
{
possible = true;
}
return possible;
}