kmp模版
1 int kmpnext[N]; 2 char s[N],t[N];///s为主串,t为模式串 3 int slen,tlen;///slen为主串的长度,tlen为模式串的长度 4 inline void getnext() 5 { 6 int i,j; 7 j=kmpnext[0]=-1; 8 i=0; 9 while(i<tlen) 10 { 11 if(j==-1||t[i]==t[j]) 12 { 13 kmpnext[++i]=++j; 14 } 15 else 16 { 17 j=kmpnext[j]; 18 } 19 } 20 } 21 /* 22 返回模式串T在主串S中首次出现的位置 23 返回的位置是从0开始的。 24 */ 25 inline int kmp_index() 26 { 27 int i=0,j=0; 28 getnext(); 29 while(i<slen&&j<tlen) 30 { 31 if(j==-1||s[i]==t[j]) 32 { 33 i++; 34 j++; 35 } 36 else 37 j=kmpnext[j]; 38 } 39 if(j==tlen) 40 return i-tlen; 41 else 42 return -1; 43 } 44 /* 45 返回模式串在主串S中出现的次数 46 */ 47 inline int kmp_count() 48 { 49 int ans=0; 50 int i,j=0; 51 if(slen==1&&tlen==1) 52 { 53 if(s[0]==t[0]) 54 return 1; 55 else 56 return 0; 57 } 58 getnext(); 59 for(i=0;i<slen;i++) 60 { 61 while(j>0&&s[i]!=t[j]) 62 j=kmpnext[j]; 63 if(s[i]==t[j]) 64 j++; 65 if(j==tlen) 66 { 67 ans++; 68 j=kmpnext[j]; 69 } 70 } 71 return ans; 72 }
作 者:Angel_Kitty
出 处:https://www.cnblogs.com/ECJTUACM-873284962/
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注我的微信公众号IT老实人(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯咖啡以资鼓励,您的肯定将是我最大的动力。thx.
我的公众号是IT老实人(IThonest),一个有故事的公众号,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!
欢迎大家关注我的Github,一些文章的备份和平常做的一些项目会存放在这里。