[luogu 3375] 【模板】KMP字符串匹配

题目

https://www.luogu.org/problemnew/show/P3375

解题思路

因为之前做的 k m p kmp kmp的题目都只用求 n e x t next next数组,而对后面的字符串模式匹配根本就用不到, 所以特地打一篇模板。

代码

#include<cstdio>
#include<cstring>
using namespace std; 
char c1[1000010],c2[1000010]; 
int kmp[1000010]; 
void write(int x){if (x>9) write(x/10); putchar(x%10+48);}
signed main()
{
	scanf("%s%s",c1,c2); 
	int len1=strlen(c1),len2=strlen(c2); 
	for (register int i=1,k=0;i<len2;kmp[i+1]=c2[k]==c2[i]?++k:0,++i)
		while (k&&c2[i]!=c2[k]) k=kmp[k]; 
	for (register int i=0,k=0;i<len1;++i){
	 	while (k&&c1[i]!=c2[k]) k=kmp[k]; 
		if ((k+=(c1[i]==c2[k]))==len2) write(i-len2+2),putchar('\n'); 
	}
	for (register int i=1;i<=len2;i++) write(kmp[i]),putchar(' '); 
}
    原文作者:KMP算法
    原文地址: https://blog.csdn.net/qq_39897867/article/details/84886799
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞