1. 程式人生 > >劍指offer(面試題31):棧的壓入和彈出序列

劍指offer(面試題31):棧的壓入和彈出序列

/*
* 給定兩個序列,一個是棧的壓入序列,一個是彈出序列,判斷彈出序列能否匹配壓入序列 
*/

#include<iostream>
#include<stack>

using namespace std;

bool isPopOrderAccurate(int pushOrder[], int popOrder[], int count) {
    stack<int> helper;
    int pushOrderIndex = 0;
    for(int i = 0; i < count; i++) {
        int popItem = popOrder[i];
        if
(helper.size() == 0 || helper.top() != popItem) { for(int j = pushOrderIndex; j < count; j++) { if(pushOrder[j] != popItem) { helper.push(pushOrder[j]); pushOrderIndex = j; } if(pushOrder[j] == popItem) { pushOrderIndex = j+1
; break; } } } else { helper.pop(); } } return helper.size() == 0; } int main() { int a[] = {1,2,3,4,5}; int b[] = {4,5,3,2,1}; cout << isPopOrderAccurate(a,b,5) << endl; int c[] = {1
,2,3,4,5}; int d[]= {4,3,5,1,2}; cout << isPopOrderAccurate(c,d,5) << endl; }