地址:https://leetcode-cn.com/problems/validate-stack-sequences/
思路:用栈模拟其出栈序列popped[],遍历pushed[l],popped[l1],将pushed[l]压入栈sta,随后比较头结点sta.top()是否与popped[l1]相等,相等则一直将其出栈直到不相等,若pushed[]全部入栈sta后sta.top()与popped[l1]不相等则其不合法。
Code:
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
class Solution {
public:
bool validateStackSequences(vector<int> &pushed, vector<int> &popped) {
bool res=true;
stack<int> sta;
int l=0,l1=0;
while(l1<popped.size()){
if(l<pushed.size()){
sta.push(pushed[l++]);
}else if(sta.top()!=popped[l1]){
res=false; break;
}
while(!sta.empty()&&sta.top()==popped[l1]){
sta.pop(); ++l1;
}
}
return res;
}
};
int main()
{
ios::sync_with_stdio(false);
Solution so;
vector<int> v1({1,2,3,4,5}),v2({4,5,3,2,1});
cout<<so.validateStackSequences(v1,v2)<<endl;
return 0;
}