(模拟法) $O(n)$
利用一个栈来模拟栈的压入与弹出操作,主要操作如下:栈初始为空,遍历push序列,依次将每个元素压入栈中,每次压入一个元素后,栈顶的元素是否与pop序列中的元素进行比较,如果相同,则弹出继续比较,如果不同则继续压栈。如果pop序列遍历完毕则正确,否则反之。
C++ 代码
class Solution {
public:
bool isPopOrder(vector<int> pushV,vector<int> popV) {
// 判断边界条件
if(!pushV.size() && !popV.size()) return true;
int n = pushV.size();
int m = popV.size();
if(n != m) return false;
// 利用一个栈来模拟操作
stack<int> stk;
int i = 0, j = 0;
while(j < m)
{
if(stk.empty() || stk.top() != popV[j])
{
stk.push(pushV[i]);
++i;
}
if(stk.top() == popV[j])
{
stk.pop();
++j;
}
}
if(stk.empty())
return true;
else
return false;
}
};
这个答案有问题,i会越界