题解 | #栈的压入、弹出序列#
class Solution { public: bool IsPopOrder(vector<int>& pushV, vector<int>& popV) { stack<int> st; int pushi=0, popi = 0; //依次入pushV的数据,栈顶数据与出栈序列匹配,如果匹配,将匹配的数据pop while (pushi < pushV.size()) { //入数据 st.push(pushV[pushi++]); //不匹配 if (st.top() != popV[popi]) { continue; } //栈顶数据与出栈序列匹配,将栈顶的数据pop else { while( !st.empty() && st.top() == popV[popi] ) { //将匹配的数据pop st.pop(); popi++; } } } return st.empty();//如果栈为空,则符合题意 } };
模拟一个栈的push和pop操作
1 、定义pushi 和popi,pushi 遍历pushV ,popi 遍历popV
2、依次入pushV的数据, 如果栈顶数据与popV中的数据不匹配,则继续入数据
如果栈顶数据与popV中的数据匹配,将栈顶数据pop ,popi往后走
注意此时pushi不需要走,可能栈顶还有数据与popV中的数据匹配
3、这个程序执行完,栈中为空,说明符合题意