思路放简单一点,遍历,push与pop字符不相符,就一直push(因为还没到pop的时候)直到pop与push对应的数字相同,表示这个数进栈之后又立马出栈了(存在这种情况,而且必须立马pop,因为如果后面的数再进来,这个数就不能先pop了)之后开始判断栈顶的元素和pop相等不相等,相等,pop(理由和之前一样,一定要在后一个元素进来之前先pop)
push走完了之后,只剩pop了,这时pop是一定能在这次循环走完才算是true,否则false(没走完,pop遍历没有达到终点)
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> st;
int p1 = 0;
int p2 = 0;
int sz = pushV.size();
while(p1 < sz)
{
st.push(pushV[p1]);
p1++;
while(st.size() != 0 && st.top() == popV[p2])
{
st.pop();
p2++;
}
}
return p2 == popV.size();
}
};