【洛谷P4824】Censoring S【KMP】
作者:互联网
分析:
K
M
P
KMP
KMP典中典
在匹配过程中 如果匹配了
T
T
T 就可将
T
T
T删除 用栈维护
删完后从栈顶能匹配的最大位置开始 继续
K
M
P
KMP
KMP
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e6+5;
char a[N],b[N];
int top,st[N],j,fail[N],len[N],lena,lenb;
int main()
{
scanf("%s%s",a+1,b+1);
lena=strlen(a+1);
lenb=strlen(b+1);
for(int i=2;i<=lenb;i++)
{
while(j&&b[i]!=b[j+1]) j=fail[j];
if(b[i]==b[j+1]) j++;
fail[i]=j;
}
j=0;
for(int i=1;i<=lena;i++)
{
while(j&&a[i]!=b[j+1]) j=fail[j];
if(a[i]==b[j+1]) j++;
len[i]=j;
st[++top]=i;
if(lenb==j)
{
top=top-j;
j=len[st[top]];
}
}
for(int i=1;i<=top;i++)
putchar(a[st[i]]);
return 0;
}
标签:lenb,P4824,洛谷,int,top,KMP,fail,include 来源: https://blog.csdn.net/dgssl_xhy/article/details/122013233