题目链接
思路:本题需要求出模式串在主串里的出现次数,利用KMP求出即可

/*
--------------KMP算法--------------
用于在字符串S中匹配字符串T本题利用KMP算法进行匹配求出全部的出现次数输出即可
但注意:本题卡cin!!!
不能用string,只能老老实实char数组scanf输入 */#include<iostream>
#include<string>
#include<string.h>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<map>
#include<set>
#include<cmath>
using namespace std;
#define ll long long
#define pi acos(-1)
const int maxn = 1e6+5;int nnext[maxn];   //用于匹配失败时指针跳转
char s[maxn];   //主字符串S
char t[maxn];   //待匹配的模式串T inline void getnext()  //获得next数组
{// next的计算依赖于字符串t int t1 = 0;int t2 = -1;nnext[0] = -1;int len = strlen(t);while(t1<len){if(t2==-1||t[t1]==t[t2])nnext[++t1] = ++t2;elset2 = nnext[t2];}
}inline int kmp1()   //kmp算法---返回第一个匹配的位置
{getnext();   //得到next数组int i = 0;int j = 0;int len1 = strlen(s);int len2 = strlen(t);while(i<len1&&j<len2){if(j==-1||s[i]==t[j]){++i;++j;}else j = nnext[j];}if(j>=len2) //匹配成功,返回位置return i-len2+1;   //这里的+1对应上面的注意事项 elsereturn -1; }inline int kmp2()   //kmp算法---输出全部匹配的位置
{int result = 0;getnext();   //得到next数组int i = 0;int j = 0;int len1 = strlen(s);int len2 = strlen(t);int book = 0; while(i<len1){if(j==-1||s[i]==t[j]){++i;++j;}else j = nnext[j];if(j==len2){//这里的+1对应上面的注意事项
//          cout<<i-j+1<<endl;   //输出匹配到的位置 ++result; j = nnext[j];book = 1;}}return result;//如果到这里book值仍为0,则匹配失败
}signed main()
{int T;scanf("%d",&T);while(T--){scanf("%s",t);scanf("%s",s);memset(nnext,0,sizeof(nnext));printf("%d\n",kmp2());}return 0;
}

HDU 1686 [KMP]相关推荐

  1. Oulipo HDU - 1686 (kmp初见讨伐!)

    题目链接 题意:给你两个字符串s,t.让你求在s中t出现了多少次. 解题思路: 先写前缀函数(前缀函数的写法点这里了解) 然后就是常规KMP模板了.统计答案时重置pos_t的位置. 错误原因:对重置p ...

  2. HDU 1686 [KMP] --by二汪

    题目链接 /* --------------KMP算法-------------- 用于在字符串S中匹配字符串T注: 此模板的字符串都是从第0位开始存的 但返回和输出的位置都是以第1位为开始的!! * ...

  3. KMP - Oulipo - HDU - 1686

    HDU - 1686 The French author Georges Perec (1936–1982) once wrote a book, La disparition, without th ...

  4. HDU 2087 (KMP不可重叠的匹配) 花布条

    题意: 用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案. 分析: 毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少. 和上一题 HDU 1686 不同,两个图 ...

  5. HDU - 1686 Oulipo

    https://vjudge.net/problem/HDU-1686 HDU - 1686 Oulipo 题目 分析 AC代码 题目 The French author Georges Perec ...

  6. Oulipo HDU - 1686(哈希或KMP)匹配字符串

    题意:字符串匹配:寻找字符串S中,字符串T出现的次数 思路:KMP或哈希 The French author Georges Perec (1936–1982) once wrote a book, ...

  7. Oulipo HDU - 1686 (使用扩展kmp进行讨伐!)

    题目链接 题意:给你两个字符串s,t.让你求在s中t出现了多少次. 解题思路: kmp做法点这里 使用扩展kmp.构建一个新字符串k=t+▲+s ▲为分隔符,保证不会影响s求z函数. 对k使用扩展km ...

  8. HDU - 1686 Oulipo KMP

    Oulipo Problem Description The French author Georges Perec (1936–1982) once wrote a book, La dispari ...

  9. HDU 1686 Oulipo【kmp求子串出现的次数】

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

最新文章

  1. Python 爬取网页HTML代码
  2. 《1024伐木累》-人生最高境界,长的好看
  3. Liferay 6.1 用maven 构建 service-builder的巨大BUG的修复
  4. 计算机组成原理 — CPU — 指令集架构类型
  5. 验证码的编写——本质:图片目的:防止恶意表单注册
  6. 计算机运算的基本原理概论,[工学]7计算概论A A02 计算机的基本原理.pdf
  7. j2ee核心模式_Operator和Sidecar正在成为软件交付新模式
  8. 对ios中CGContextRef和image的处理
  9. CTC 解码算法之 prefix beam search
  10. 汇编考试一星题目对字母操作,输入字符并在屏幕上显示
  11. Windows Phone 7 手机使用小记
  12. 微信小程序位置定位php,【微信开发】微信小程序通过经纬度计算两地距离php代码实现...
  13. Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群)
  14. cmake安装包下载
  15. linux go语言运行环境,linux下怎么安装go语言环境
  16. 12306GT多线程、分流免费抢票工具使用心德
  17. 没有网络电脑计算机还能用吗,电脑连不上公用网络怎么办
  18. 【C/C++进阶】输入的技巧
  19. 【Java练习题】Java 程序的输出 | 第十三套(集合)
  20. 服务器ip账号密码怎么查,网站服务器的ip地址怎么查_网站服务器的维护

热门文章

  1. 石头剪刀布Swoole
  2. 网众无盘常见问题解决方案(转)
  3. 配置NHibernate
  4. RabbitMQ指南(三) 队列
  5. iOS启动优化-二进制重排与Clang插桩
  6. 深入探索编译插桩技术(四、ASM 探秘,android中文api文档
  7. Flink1.11 intervalJoin watermark生成,状态清理机制源码理解Demo分析
  8. pv3d 打造三维全景图
  9. chartjs 表格刷新
  10. 基于微信小程序的球鞋商城系统的设计及实现