标签:数字 bsp cto template vector clu 不可用 const pac
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。
#include <iostream> #include <vector> #include <stack> using namespace std; template <typename T> class Solution { public: bool is_pop_oreder(const vector<T> &v1,const vector<T> &v2); private: stack<T> s; }; template <typename T> bool Solution<T>::is_pop_oreder(const vector<T> &v1,const vector<T> &v2) { typename vector<T>::const_iterator begin_1=v1.begin();//压入序列 typename vector<T>::const_iterator begin_2=v2.begin();//弹出序列 if(v1.empty()||v2.empty()||v1.size()!=v2.size()) return false; //根据压入序列匹配弹出序列,不可用begin_1<v1.end()因为此时栈顶元素不是要弹出的元素,需要一直入栈,入栈完成 //之后可根据栈中的元素去匹配要弹出的元素 while(begin_2<v2.end()) { while(s.empty()||s.top()!=*begin_2) { if(begin_1==v1.end())//压入序列全部压人之后,不再入栈 break; s.push(*begin_1); ++begin_1; } if(s.top()!=*begin_2) break; s.pop(); ++begin_2; } if(s.empty()&&begin_2==v2.end()) return true; else return false; } int main() { vector<int> v1{1,2,3,4,5}; vector<int> v2{4,3,5,1,2}; Solution<int> s; cout<<boolalpha<<s.is_pop_oreder(v1,v2)<<endl; return 0; }
标签:数字 bsp cto template vector clu 不可用 const pac
原文地址:https://www.cnblogs.com/tianzeng/p/10185328.html