题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
class Solution { private: bool isBehind(int pushIndex, int popNum, std::vector<int>& pushV) { bool result = false; for (int j = pushIndex; j < pushV.size(); j++) { if (pushV[j] == popNum) result = true; // 在index位置的后面 } return result; } public: bool IsPopOrder(std::vector<int>& pushV, std::vector<int>& popV) { if (popV.size() == 0 || pushV.size() == 0) return false; std::stack<int> stack; int pushIndex = 0; int temp = 0; for (int i = 0; i < popV.size(); i++) { int popNum = popV[i]; if (stack.empty() || stack.top() != popNum) { if (isBehind(pushIndex, popNum, pushV)) { while (pushV[pushIndex] != popNum) { // 将相应的值压入堆栈 stack.push(pushV[pushIndex]); pushIndex++; } } else return false; pushIndex++; } else if (stack.top() == popNum) { stack.pop(); } } return true; } };