题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
class Solution {
public:
bool IsPopOrder(vector<int> pushV, vector<int> popV) {
int i, j;
stack<int> s;
i = j = 0; // i 代表压入数列,压入栈中的个数,以及压入数列的下标数; j 代表压出数列的下表数及个数;
bool ans = true;
if(pushV.size()==0 || popV.size()==0) return false;
while (i<pushV.size()&&j<popV.size()) {
if (pushV[i] == popV[j]) { //判断压入数列的第 i 个数和压出数列的第 j 个数是否相等;
i++;
j++;
} else if (!s.empty() && s.top() == popV[j]) { //在模拟栈不为空的情况下,判断栈顶元素与压出数列的第就 j 个元素是否相等
j += 1;
s.pop();
} else if (i < pushV.size()) { //在模拟栈中压入的总次数少于 压入数列长度的情况下,
s.push(pushV[i]);
i++;
} else { //如果前面的条件都不满足,说明此时压入的数 i 已经超出了压入数列的长度限制;
ans = false;
break;
}
}
return ans;
}
};
