面试题22 栈的压入、弹出序列

题目描述

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

 

posted @ 2016-04-04 23:46  早杰  阅读(137)  评论(0编辑  收藏  举报