HDU2087--KMP模板题

xiaoxiao2021-02-28  82

中文题,不解释。

注意:每次匹配成功要把j移动到0的位置。

第一次做KMP的题目,看了半天依旧有点模糊。。。以后多练练吧

代码:

#include<cstdio> #include<cstring> using namespace std; int next[100009],cnt,n,m; char a[100009],b[100009]; void getnext() { int i=0,j=-1; next[0]=-1; while(i<n) { if(j==-1 || a[i]==a[j]) { i++; j++; next[i]=j; } else { j=next[j]; } } } void kmp() { int i=0,j=0; cnt=0; n=strlen(a); m=strlen(b); getnext(); while(i<n) { if(j==-1||a[i]==b[j]) { i++; j++; } else { j=next[j]; } if(j==m) { cnt++; j=0; } } } int main() { while(scanf("%s",&a)==1) { if(a[0]=='#')return 0; scanf("%s",&b); kmp(); printf("%d\n",cnt); } }

转载请注明原文地址: https://www.6miu.com/read-94973.html

最新回复(0)