知识点:栈
一、题目描述:
二、方法:
借用一个辅助的栈tmp,遍历压栈序列pushV,先将压栈序列中的第一个值放入辅助栈tmp中,这里是1,然后判断辅助栈tmp的栈顶元素是不是出栈序列popV中的第一个元素,这里是4,很显然1≠4,所以我们继续将压栈序列中的第二个值放入辅助栈中。直到辅助栈的栈顶元素和出栈序列的第一个元素相等以后辅助栈开始出栈,出栈一个元素的同时并将出栈列序中的值向后移动一位,接着判断,直到不相等才停止出栈,继续向辅助栈存入。等压栈序列遍历完成后,如果辅助栈还不为空,说明弹出序列不是该入栈序列的弹出顺序。
三、代码实现:
C++:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int lenPush = pushV.size();
int lenPop = popV.size();
if(lenPush != lenPop){
return false;
}
stack<int> tmp;
for(int i=0,j = 0; i<lenPush; i++){
tmp.push(pushV[i]);
//判断栈顶元素是否同出栈序列的第一个元素相等,不相等则继续入栈
while(tmp.top() == popV[j] && j<lenPop){
tmp.pop();
j++;
}
}
if(tmp.empty()){
return true;
}
return false;
}
};
python:
# -*- coding:utf-8 -*-
class Solution:
def IsPopOrder(self, pushV, popV):
if len(pushV)!=len(popV):
return False
tmp = []
i = 0
j = 0
for i in range(0,len(pushV)):
tmp.append(pushV[i])
while j<len(popV) and tmp[-1]==popV[j]:#这里是循环,不能写成条件判断
tmp.pop()
j += 1
if len(tmp):
return False
return True