题目:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
例子:
序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
链接:
剑指Offer(第2版):P168
思路标签:
- 利用辅助栈实现
解答:
1. C++
- 我们将顺序序列直接作为元素来看,使用辅助栈,实现压入序列的入栈和出栈操作即可判断。
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
bool possible = false;
if(pushV.size()>0 && popV.size()>0){
int pPush = 0;
int pPop = 0;
std::stack<int> stackData;
while(pPop < popV.size()){
while(stackData.empty() || stackData.top()!=popV[pPop]){
if(pPush == pushV.size())
break;
stackData.push(pushV[pPush]);
pPush++;
}
if(stackData.top() != popV[pPop])
break;
stackData.pop();
pPop++;
}
if(stackData.empty() && pPop == popV.size())
possible = true;
}
return possible;
}
};