剑指offer第二十一题
让我们一起来看看题目
思路与代码
这个题目的比较有的地方比较难处理,那就是,出栈的不一定是压入完了才开始出栈。
例如: 1 2 3 4 5入栈 4 5 3 2 1出栈
我们先压入栈。遇到和出栈相同的元素的时候,就开始出栈,
1入栈
2入栈
3入栈
4入栈和出栈4相同,4出栈,3和5不同结束出栈
5入栈和出栈5相同,5出栈,3和出栈3相同
3出栈
2出栈
1出栈
这样,栈就空了,空了就说明是对了,返回true
同样的,对于
1 2 3 4 5入栈,4 3 5 1 2出栈
1入栈
2入栈
3入栈
4入栈和出栈4相同,4出栈
3和出栈3相同,3出栈
2和出栈5不同,结束出栈
5入栈和出栈5相同,5出栈
2和出栈1不同。结束出栈
入栈全部结束,栈能剩1 2不为空
所以返回false
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> temp;
int i=0,j=0,len=pushV.size();
for(;i<len;i++){
temp.push(pushV[i]);
for(;!temp.empty()&&temp.top()==popV[j];j++){
temp.pop();
}
}
return temp.empty();
}
};