栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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 };

 

posted @ 2016-01-22 19:29  小爷  阅读(219)  评论(0编辑  收藏  举报