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 }
复制代码

 

posted @   Angel_Kitty  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示
哥伦布
14°
14:09发布
哥伦布
14:09发布
14°
大雨
南风
3级
空气质量
相对湿度
93%
今天
中雨
14°/19°
周日
中雨
5°/19°
周一
1°/11°