#include <iostream> #include <vector> using namespace std; class Solution { public: bool IsPopOrder(vector<int> pushV, vector<int> popV) { if (pushV.size() != popV.size()) { return false; } vector<int> mStack; int j = 0; //经过pushV.size(),检验全部入栈元素 for (int i = 0; i < pushV.size(); i++) { if (pushV[i] == popV[j]) { //直接出栈 j++; while((!mStack.empty()) && (mStack[mStack.size() - 1] == popV[j])){ mStack.pop_back(); j++; } } else if (mStack.size() == 0) { //栈为空,入栈 mStack.push_back(pushV[i]); } else if (mStack[mStack.size() - 1] == popV[j]) { //栈顶元素出栈,并将新元素入栈 mStack.pop_back(); mStack.push_back(pushV[i]); j++; while((!mStack.empty()) && (mStack[mStack.size() - 1] == popV[j])){ mStack.pop_back(); j++; } } else { mStack.push_back(pushV[i]); } // printStack(mStack); } //检查剩余元素 for (int i = mStack.size() - 1; i >= 0; i--) { if (mStack[i] != popV[j]) { return false; } j++; // printStack(mStack); } return true; } void printStack(vector<int> myStack){ string str ="mystack:["; for(auto num:myStack){ str+= to_string(num)+","; } str+="]"; cout<<str<<endl; } };