输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
1 class Solution { 2 public: 3 std::stack<int> ss; 4 bool IsPopOrder(vector<int> pushV,vector<int> popV) { 5 if (pushV.size() != popV.size() || pushV.size()== 0|| popV.size() ==0) 6 return 0; 7 int tem; 8 int cnt = 0; 9 bool is = 1; 10 int n = pushV.size() ; 11 for(int j = 0 ; j < n; ++j) 12 { 13 tem = popV[j]; 14 if(is && (ss.empty() || ss.top()!= tem)) 15 { 16 while(cnt < n && pushV[cnt] != tem) 17 { 18 ss.push(pushV[cnt]); 19 ++ cnt; 20 } 21 ++cnt; 22 if (cnt >= n && pushV[n-1] != tem) 23 { 24 is = 0; 25 break; 26 } 27 } 28 else if(is && ss.top() == tem) 29 { 30 ss.pop(); 31 } 32 } 33 return is; 34 } 35 };