题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.size() == 0 || popV.size() == 0) return false;
int popVPos = 0;
int pushVPos = 0;
stack<int> st;
/*
当押入 vector 并且弹出 vector 还有内容时循环继续,
stack 中不断压入 pushVec 的元素,直到遇到 popVec 的元素
不断弹出 popVec 的元素,直到 stack 中的 top 元素不再和 popVec 相同
重复上述循环
如果结束时 stack 中还有内容表示 否
*/
while(pushVPos < pushV.size() && popVPos < popV.size()) {
if(pushVPos < pushV.size()) {
int pushVal = pushV[pushVPos];
st.push(pushVal);
pushVPos++;
}
while(st.size() && st.top() == popV[popVPos]) {
st.pop();
popVPos++;
}
}
if(st.size()) return false;
return true;
}
};