KMP之所以线性,因为匹配的时候i是不往回走的

我们只用调整j的位置

假设在s中找t

用二元组(i,j)表示s串的[i-j+1,i] 与t串的[1,j]匹配

假设s[i+1]和t[j]匹配上了,就j++

如果不匹配的话,我们就想办法调整j,

直到找到一个满足二元组条件的j并且t[j+1]=s[i]

快速调整j就是利用nxt数组的过程,

处理nxt的方法类似与两个串之间的匹配

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define N 1000010
 5 using namespace std;
 6 char s[N],t[N];
 7 int T,nxt[N],n,m,ans;
 8 int main()
 9 {
10     scanf("%d",&T);
11     getchar();
12     while (T--)
13     {
14     ans=0;
15     memset(nxt,0,sizeof(nxt));
16     scanf("%s%s",s+1,t+1);
17     n=strlen(s+1),m=strlen(t+1);
18     for (int i=2,j=0;i<=n;i++)
19     {
20         while (j>0 && s[j+1]!=s[i]) j=nxt[j];
21         if (s[j+1]==s[i]) j++;
22         nxt[i]=j;
23     }
24     for (int i=1,j=0;i<=m;i++)
25     {
26         while (j>0 && s[j+1]!=t[i]) j=nxt[j];
27         if (s[j+1]==t[i]) j++;
28         if (j==n) ans++,j=nxt[j];
29     }
30     printf("%d\n",ans);
31     }
32     return 0;
33 }

转载于:https://www.cnblogs.com/mrsheep/p/7856161.html

POJ 3461Oulipo KMP模板相关推荐

  1. POJ Oulipo(KMP模板题)

    题意:找出模板在文本串中出现的次数 思路:KMP模板题 #include<cstdio> #include<cstring> #include<cmath> #in ...

  2. POJ:3461-Oulipo(KMP模板题)

    原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...

  3. POJ - Oulipo(KMP)

    题目链接:http://poj.org/problem?id=3461 Time Limit: 1000MS Memory Limit: 65536K Description The French a ...

  4. kuangbin专题16B(kmp模板)

    题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...

  5. HDU 1711 Number Sequence(KMP模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. 1 #include<iostream> 2 #include&l ...

  6. 扩展KMP模板(学习)

    学习链接:https://www.luogu.org/problemnew/solution/P5410 一.引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 二.前置知识 kmp的算法 ...

  7. Oulipo(欧力波)(经典kmp模板题) HDU-1686

    题目:Oulipo(欧力波) 中文大意 The French author Georges Perec (1936�C1982) once wrote a book, La disparition, ...

  8. Codeforce-126B:Password(KMP模板题)

    题目链接:点击打开链接 题目大意: 给你一个串,让你求这个串的一个同时是前缀,后缀(这个说法好像不太对)且在串中出现过的最长子串. 举个例子: 对于串 fixprefixsdfix 就应该输出fix. ...

  9. 【KMP模板】简单写个KMP~

    本来easy的KMP 却一直过不了洛谷的模板题... 仔细一看原来在输出next数组时打的回车而不是空格... 身败名裂... 话说有个sunday貌似一般状况下比KMP快呢...去看看2333 #i ...

最新文章

  1. C语言编程的Debug版和Release版
  2. Windows Phone开发(25):启动器与选择器之WebBrowserTask
  3. Vue基础之事件处理器
  4. YAML_02 playbook的ping脚本检测
  5. 1.2 Linux的网络配置和连接工具
  6. [转]《帮我买个单》
  7. python网络蜘蛛
  8. C语言——通讯录的实现
  9. PHP语言面对对象编程之继承
  10. 基因测序技术发展历史以及一、二、三代测序技术原理及应用
  11. 陈伟华,羽毛球视频教学
  12. macOS SwiftUI 教程之 06 绘图实现正弦波,通过调整频率和步进值来更新正弦波视图 (教程含源码)
  13. 【人工智能】人工智能的概况(绪论)
  14. 软件测试职业规划(转)
  15. 目标检测——梯度均衡机制GHM(Gradient Harmonized Mechanism)的理解
  16. B1192 [HNOI2006]超级英雄Hero 二分图匹配
  17. Lintcode 4 Ugly Number II
  18. volatile,CAS,ABA三个关键字
  19. java-php-net-python-拼餐网站计算机毕业设计程序
  20. “中国建筑业竞争力百强”中化二建如何做知识管理?

热门文章

  1. Android中常见功能包描述
  2. sql sever 2008基础知识
  3. Phaser开源2d引擎 javascript/html5游戏框架
  4. Spring Cloud Edgware新特性之八:Zuul回退的改进
  5. QT的常用对话框的应用
  6. 组合自定义控件的步骤详解
  7. xcode工程命令行生成ipa安装包
  8. 【iHMI43 4.3寸液晶模块】demo例程(版本1.03)发布
  9. 从Pycharm说起
  10. Redis的七种武器及其适合的应用场景