设置两个指针p1 = 0
, p2 = 0
,建立栈s
遍历弹出序列popV
,对于当前元素popV[p2]
情况1:栈s
为空,或栈顶元素和popV[p2]
不匹配,则尝试从pushV
中压入新的元素
情况2:栈顶元素和popV[p2]
匹配,则检查下一个元素,p2++
class Solution {
public:
bool IsPopOrder(vector<int> pushV, vector<int> popV) {
int p1 = 0, p2 = 0;
stack<int> s;
// 遍历弹出序列popV
while( p2 < popV.size() )
// 情况1:当栈为空,或栈顶元素和popV当前元素不匹配时
// 需要尝试从pushV中压入新的元素,如果没有元素可用了,直接返回false
if( s.empty() || s.top() != popV[p2] )
{
if( p1 == pushV.size() )
return false;
s.push( pushV[p1] );
p1++;
}
else // 情况2:栈顶元素和popV当前元素匹配
{
s.pop();
p2++;
}
// 当pushV和popV的size相等时,return true也能AC
// 但最严谨的写法为return s.empty()
return s.empty();
}
};