题目:元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。
思路:借用一个辅助栈,先按照入栈顺序push,直到栈顶元素和出栈序列相等就pop,以此类推,最后栈为空且两个序列都被遍历到。
bool Ispoporder(vector<int>&PushV,vector<int>&PopV) { stack<int> s; int lpush=PushV.size(),lpop=PopV.size(); if(PushV.empty() || PopV.empty() || lpush!=lpop) return false; int j=0; for(int i=0;i<lpush;i++) { while(!s.empty() && s.top()==PopV[j]) { s.pop(); j++; } s.push(PushV[i]); } if(j<lpop) { while(!s.empty() && s.top()==PopV[j]) { s.pop(); j++; } } if(s.empty()) return true; else return false; }