给定两个序列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;
}

 

posted @ 2022-05-27 21:37  fourmii  阅读(48)  评论(0编辑  收藏  举报