【面试题】剑指offer22-判断一个序列是否是某一个栈的序列

来源:互联网 发布:电视机32寸淘宝网 编辑:程序博客网 时间:2024/05/21 17:47

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。

假设压入站的所有数字均不相等。

例如序列1,2,3,4,5是某站的压栈序列,序列4,5,3,2,1是该压栈序对应的一个弹出序列,但是4,3,5,2,1

就不是该压栈序列的弹出序列。

解决这个问题,我们需要一个辅助栈,把输入第一个序列的数字依次压入该辅助栈,并按照第二个序列

的顺序依次从该栈中弹出数字。

代码的实现:

#include<iostream>using namespace std;#include<assert.h>#include<stack>bool IsPopOrder(const int* pPush, const int* pPop, size_t length){assert(length);assert(pPush && pPop);bool possible = false;const int* NextPush = pPush;const int* NextPop = pPop;stack<int> s;while (NextPop - pPop < length){while (s.empty() || s.top() != *NextPop){if (NextPush - pPop == length){break;}s.push(*NextPush);NextPush++;}if (s.top() != *NextPop){break;}s.pop();NextPop++;}if (s.empty() && NextPop - pPop == length){possible = true;}return possible;}


阅读全文
0 0
原创粉丝点击