KMP模板(KMP)

放一个模板在这里搞事情。。。。。。

学KMP的话找SYCstudio吧(博客链接

代码(多组数据,\(O(n)\)求一个串是否在另一个串里出现过)

#include<cstdio>
#define R register
const int N=1e5+9;
char s[N],t[N];
int ne[N];
int main(){
	ne[0]=-1;
	R int i,j;
	while(~scanf("%s%s",s,t)){
		for(i=1;t[i];++i){
			for(j=ne[i-1];~j&&t[i]!=t[j+1];j=ne[j]);
			ne[i]=t[i]==t[j+1]?j+1:-1;
		}
		for(j=-1,i=0;s[i]&&t[j+1];++i){
			for(;~j&&s[i]!=t[j+1];j=ne[j]);
			j+=s[i]==t[j+1];
		}
		puts(t[j+1]?"NO":"YES");
	}
	return 0;
}
posted @ 2018-07-24 19:52  Flash_Hu  阅读(247)  评论(0编辑  收藏  举报