bzoj3942

    xiaoxiao2021-03-25  59

    分析:..每次直接加入栈,然后用kmp来匹配就可以了。。然而我第一次kmp的时候把第二个写成第一个串WA了无数次。。

    #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int N=1e6+1e3+5; char s1[N],stack[N],s2[N]; int next[N],n,m; int a[N],top; int main() { scanf("%s%s",s1+1,s2+1); n=strlen(s1+1); m=strlen(s2+1); int j=0; fo(i,2,m) { while (j&&s2[j+1]!=s2[i])j=next[j]; if (s2[j+1]==s2[i])j++; next[i]=j; } top=0; fo(i,1,n) { stack[++top]=s1[i]; int j=a[top-1]; while (j&&s2[j+1]!=stack[top])j=next[j]; if (s2[j+1]==stack[top])j++; a[top]=j; if (a[top]==m)top-=m; } stack[top+1]=0; puts(stack+1); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-38050.html

    最新回复(0)