博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP算法模板
阅读量:6709 次
发布时间:2019-06-25

本文共 979 字,大约阅读时间需要 3 分钟。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 int N, fail[2000000], ANS[2000000]; 9 char pat[2000000], text[2000000];10 inline void KMP() {11 int n = strlen(pat);12 for (int i = 0; i <= n + 1; i++) fail[i] = 0;13 for (int i = 1; i <= n - 1; i++) {14 int j = i;15 while (j>0) {16 j = fail[j];17 if (pat[j] == pat[i]) {18 fail[i + 1] = j + 1;19 break;20 }21 }22 }23 ANS[0] = 0;24 int m = strlen(text);25 for (int i = 0, j = 0; i <= m - 1; i++) {26 if (j <= n - 1 && text[i] == pat[j]) j++;27 else {28 while (j > 0) {29 j = fail[j];30 if (text[i] == pat[j]) {31 j++; break;32 }33 }34 }35 if (j == n) ANS[++ANS[0]] = i - n + 1;36 }37 }38 int main() {39 scanf("%d", &N);40 while (N--) {41 cin >> pat >> text;42 KMP();43 printf("%d\n", ANS[0]);44 }45 return 0;46 }

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4681625.html

你可能感兴趣的文章
webdriver API study
查看>>
【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
查看>>
Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
查看>>
Android 学习之 开源项目PullToRefresh的使用
查看>>
Matplot中文乱码完美解决方式
查看>>
tomcat的webappclassloader中一个奇怪的异常信息
查看>>
漫谈程序猿系列:群星闪耀的黄金时代
查看>>
2016百度编程题:蘑菇阵
查看>>
webpack系列之一总览
查看>>
如何打造BCH使用的刚性需求?
查看>>
一个小需求引发的思考
查看>>
慎用System.nanoTime()
查看>>
算法的时间复杂度
查看>>
基础设施即代码:Terraform和AWS无服务器
查看>>
反模式的经典 - Mockito设计解析
查看>>
Visual Studio 15.7预览版4改进Git、C++支持
查看>>
微软宣布支持基于虚拟机的Azure IOT Edge服务
查看>>
来自社区的Visual Studio Code使用体验和教程
查看>>
[deviceone开发]-cnodejs论坛移动端App
查看>>
智能指针shared_ptr(effective modern c++笔记)
查看>>