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...
 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 }

 

目录
相关文章
P3375 【模板】KMP字符串匹配
P3375 【模板】KMP字符串匹配
57 0
|
9天前
|
存储 算法 搜索推荐
Python进阶必备:字典树Trie与后缀树Suffix Array,效率提升的神器!
在Python编程中,掌握高效的数据结构对于提升程序性能至关重要。本文将深入探讨两种强大的字符串处理数据结构——字典树(Trie)与后缀数组(Suffix Array)。字典树,又称前缀树,适用于自动补全和拼写检查等功能。例如,在文本编辑器中实现自动补全时,字典树能够即时提供单词补全选项。后缀数组则用于存储字符串的所有后缀并按字典序排序,结合最长公共前缀(LCP)数组,可以高效解决许多字符串问题,如查找最长重复子串等。通过实际案例,我们将展示这两种数据结构的强大功能,帮助你在Python编程中更进一步。
26 2
|
2月前
|
存储 自然语言处理 Java
HanLP — 双数组字典树 (Double-array Trie) 实现原理 -- 代码 + 图文,看不懂你来打我
HanLP — 双数组字典树 (Double-array Trie) 实现原理 -- 代码 + 图文,看不懂你来打我
21 0
|
5月前
|
C++
|
5月前
[leetcode 数组]模版
[leetcode 数组]模版
|
算法
KMP模板
KMP模板
|
存储 人工智能 算法
Trie树模板与应用
Trie树模板与应用
86 0
Trie树模板与应用
|
算法
kmp算法模板
临近期末了,要开始复习了,先复习一下数据结构的kmp算法吧
|
机器学习/深度学习 算法 容器
浅谈迷宫搜索类的双向bfs问题(例题解析)
在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,bfs找最短次数等等题目的问题。在我们刚开始ac的时候、可能有着很多满足感!感觉是个迷宫问题咱么都可以给他这么搜出来 !!
177 0
浅谈迷宫搜索类的双向bfs问题(例题解析)
|
自然语言处理
LeetCode每日一题——745. 前缀和后缀搜索
设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。
72 0