kmp算法模板

简介: kmp算法模板

题目描述:

请你在 S 中找到所有的 P。

输入描述:两行,第一行是字符串 S,第二行是模式串 P。

输出描述:输出每个 P 在 S 中的位置。


1. #include<bits/stdc++.h>
2. using namespace std;
3. const int N = 1005;
4. char str[N], pattern[N];
5. int Next[N];
6. 
7. void getNext(char *p, int plen){     //计算Next[1]~Next[plen]
8. Next[0]=0; Next[1]=0;
9. for(int i=1; i < plen; i++){  //把i的增加看成后缀的逐步扩展
10.         int j = Next[i];          //j的后移:j指向前缀阴影w的后一个字符
11.         while(j && p[i] != p[j])  //阴影的后一个字符不相同
12.             j = Next[j];          //更新j
13. if(p[i]==p[j])   Next[i+1] = j+1;
14. else             Next[i+1] = 0;
15.     }
16. }
17. void kmp(char *s, char *p) {         //在s中找p
18.     int last = -1;
19.     int slen=strlen(s), plen=strlen(p);
20.     getNext(p, plen);               //预计算Next[]数组
21.     int j=0;
22. for(int i=0; i<slen; i++) {     //匹配S和P的每个字符
23.         while(j && s[i]!=p[j])      //失配了。注意j==0是情况(1)
24.              j=Next[j];             //j滑动到Next[j]位置
25. if(s[i]==p[j])  j++;        //当前位置的字符匹配,继续
26. if(j == plen) {             //j到了P的末尾,找到了一个匹配
27. //匹配了一个,在S中的起点是i+1-plen,末尾是i。如有需要可以打印:
28.                printf("Location=%d, %s\n", i+1-plen,&s[i+1-plen]);
29.         }
30.     }
31. }
32. int main(){
33.     scanf("%s", str);          //读串S
34.     scanf("%s", pattern);      //读模式串P
35.     kmp(str, pattern);
36. return 0;
37. }
目录
相关文章
|
5月前
|
算法
【算法】前缀和——二维前缀和模板题
【算法】前缀和——二维前缀和模板题
|
7月前
|
算法
数据结构中的KMP算法及其改进算法
KMP算法通过引入部分匹配表,有效避免了重复计算,从而将字符串匹配的时间复杂度降低到O(m+n)。通过进一步优化next数组,KMP算法的效率得到了进一步提升。对于大规模字符串匹配问题,KMP算法及其改进算法提供了高效的解决方案,是计算机科学领域的经典算法之一。
109 3
|
3月前
|
算法
第四章 KMP算法理论基础
第四章 KMP算法理论基础
25 0
|
3月前
|
算法
KMP算法
KMP算法
44 0
|
5月前
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
6月前
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
143 1
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
5月前
|
算法
KMP算法
KMP算法
39 0
|
7月前
|
算法 Java 数据处理
Java算法模板 数据流快读
Java算法模板 数据流快读
53 2
|
6月前
|
设计模式 JavaScript 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
200 0
|
6月前
|
算法 Java
KMP算法详解及其在字符串匹配中的应用
KMP算法详解及其在字符串匹配中的应用

热门文章

最新文章