cf Queries on a String

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 200005
char s[maxn];
int nxt[maxn][27],ans[maxn],t[maxn];
int main(){
    int q;
    scanf("%s %d",s+1,&q);
    int n=strlen(s+1);
    memset(nxt[n],-1,sizeof nxt[n]);
    for(int i=n-1;i>=0;i--)
        for(int j=0;j<26;j++)
            if(s[i+1]-'a'==j) nxt[i][j]=i+1;//下一个 'a'+j 在字符串的第i+1个位置 
            else nxt[i][j]=nxt[i+1][j];//下一个'a'+j字符在字符串的nxt[i+1][j]个位置 
    
    int len=1;
    char op[10],c;
    t[0]=0;
    while(q--){
        scanf("%s",op);
        if(op[2]=='s'){
            cin >> c;
            if(t[len-1]==-1) t[len]=-1;
            else t[len]=nxt[t[len-1]][c-'a'];
            len++;
        }
        else len--;
        if(t[len-1]!=-1) puts("YES");
        else puts("NO"); 
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zsben991126/p/9904975.html