给定两个序列src,dst,src为入栈顺序,判断dst是否为src的一个出栈顺序(c++)
bool isPOP(const std::vector<int>&src, const std::vector<int>&dst) { int m = src.size(), n = dst.size(); if(m != n)return false; int i = 0, j = 0; std::stack<int>st; while(i < m && j < dst.size()) { for(;i < m && src[i] != dst[j];++i) { st.push(src[i]); } if(i == m)return false; ++i; ++j; for(;j < n &&!st.empty() && st.top() == dst[j];++j) { st.pop(); } } return true; } void test() { std::vector<int>src{1,2,3,4,5,6}; std::vector<int>dst{1,5,4,3,2,5}; std::cout << isPOP(src,dst) << std::endl; }