模拟,全TLE求助

P4387 【深基15.习9】验证栈序列

Your_Majesty @ 2023-07-27 11:51:20


#include<iostream>
#include<stack>
using namespace std;
stack<int> st1;
int n,q;
string s1,s2;

int main(){
    cin>>q;
    getchar();

    for(int i=1;i<=q;i++){
        cin>>n;
        getchar();
        getline(cin,s1);
        getline(cin,s2);

        st1.push(s1[0]);            //数据预处理,防止访问非法空间 
        s1.erase(0,1);
        while(st1.top()!=s2[0]){
            st1.push(s1[0]);
            s1.erase(0,1);
        }

        while(!s2.empty()){
            if(st1.top()==s2[0]){
                st1.pop();
                s2.erase(0,1);
            }

            else if(st1.top()!=s2[0] && !s1.empty()){
                while(st1.top()!=s2[0]){
                    st1.push(s1[0]);
                    s1.erase(0,1);
                }
            }
            else if(st1.top()!=s2[0] && s1.empty()){
                cout<<"NO"<<endl;
                break;
            }
        }

        if(s2.empty()) cout<<"YES"<<endl;
    }

    return 0;
}

|