劍指offer(面試題31):棧的壓入和彈出序列
阿新 • • 發佈:2019-02-13
/*
* 給定兩個序列,一個是棧的壓入序列,一個是彈出序列,判斷彈出序列能否匹配壓入序列
*/
#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;
}