栈的压入、弹出序列

输入两个整数序列,第一个序列表示的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列45,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

 

#include "stdafx.h"
#include <string>
using namespace std;
#include<stack>
#include <vector>



实现  栈的压入、弹出序列
class Solution
{
    public:

        bool IsPopOrder(vector<int> pushA, vector<int> popA)
        {
            if (pushA.size() == 0 || popA.size() == 0)
            {
                return false;
            }
            for (int i = 0, j = 0; i < pushA.size(); i++)
            {
                st.push(pushA[i]);
                if (j < popA.size() && st.top() == popA[j])
                {
                    st.pop();
                }

            }
            return st.empty();
        }

        Solution();
        ~Solution();

    private:
        stack <int> st;
};

Solution::Solution()
{
}

Solution::~Solution()
{
}



int main()
{
    Solution sou;
    vector<int> aa = { 1, 2, 3, 4, 5 };
    vector<int> bb = { 4, 3, 5, 1, 2 };
    bool bRet = sou.IsPopOrder(aa, bb);
    return 1;
}

posted on 2020-04-17 22:32  心中日月007  阅读(106)  评论(0编辑  收藏  举报