题目大意:

输入一个T,表示有T组测试数据;

每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数;

这题很明显要用KMP算法,不然很容易超时,但在使用kmp算法时也要注意,我第一次将匹配成功的位置得到后,循环进入kmp算法,从前一个匹配到的位置开始算起,但是超时了。后来问完学长之后,清楚了,没必要循环进入kmp,直接一次可以搞定,每次模式串匹配到末尾时,都将计数+1,然后根据next[m],重新得到j继续与原串进行匹配直到进行到原串结束。

代码如下:

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std; char b[];
char a[];
int next[];
int n,m,count; void getNext(char *b)
{
int j;
next[]=,next[]=;
for(int i=;i<m;i++){
j=next[i];
while(j&&b[j]!=b[i]) j=next[j];
if(b[j]==b[i]) next[i+]=j+;
else next[i+]=;
}
} void kmp(char *a,char *b,int *next)
{
int j=;
for(int i=;i<n;i++){ while(j&&a[i]!=b[j]) j=next[j];
if(a[i]==b[j]) j++;
if(j==m) count++,j=next[j];
}
} int main()
{
int T;
cin>>T;
while(T--){
count=;
string W,T;
cin>>W>>T;
n=T.size();
m=W.size();
for(int i=;i<n;i++){
a[i]=T.at(i);
}
for(int i=;i<m;i++){
b[i]=W.at(i);
} getNext(b);
kmp(a,b,next);
cout<<count<<endl;
}
return ;
}

HDU1686 计算模式串匹配的次数的更多相关文章

  1. hdu 1686 Oulipo 【KMP】(计算模式串匹配的次数——与已匹配的字串可以有交集)

    题目链接:https://vjudge.net/contest/220679#problem/B 题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于100 ...

  2. 【转载】多模式串匹配之AC自动机

    原文地址:https://www.cnblogs.com/codeape/p/3845375.html 目录 [隐藏] 一.概述 二.AC算法思想 三.字典树tire的构造 四.搜索路径的确定 附录: ...

  3. 模式串匹配之KMP算法

    模式串匹配之KMP算法 KMP算法 模式值计算(next[j]) (1) next[0]=-1,  第一个字符模式值为-1 (2) next[j]=-1, T中下标为j的字符与首字符相同,且j前面的1 ...

  4. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  5. 《Kafka Stream》调研:一种轻量级流计算模式

    原文链接:https://yq.aliyun.com/articles/58382 摘要: 流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计 ...

  6. 使用Python的yield实现流计算模式

    首先先提一下上一篇<如何猜出Y combinator>中用的方法太复杂了.其实在Lambda演算中实现递归的思想很简单,就是函数把自己作为第一个参数传入函数,然后后面就是简单的Lambda ...

  7. 模式串匹配KMP详解

    关于KMP模式串匹配网上蛮多的. 对于KMP有自己理解所以写下来希望能够对你们的学习有帮助. 之前暑假的时候学过,然后好长时间没用发现又忘了,现在再看看发现有了新的理解. ============== ...

  8. PyCharm:2017.3版即将新增科学计算模式,预览版现在可以下载使用

    编译:Lemon,原文作者:Ernst Haagsman 公众号:Python数据之道(ID:PyDataRoad) pycharm:2017.3版即将新增科学计算模式 在JetBrains将发布的新 ...

  9. 单模式串匹配----浅谈kmp算法

    模式串匹配,顾名思义,就是看一个串是否在另一个串中出现,出现了几次,在哪个位置出现: p.s.  模式串是前者,并且,我们称后一个 (也就是被匹配的串)为文本串: 在这篇博客的代码里,s1均为文本串, ...

随机推荐

  1. nginx 80端口重定向到443端口

    server { listen ; server_name www.域名.com; rewrite ^(.*)$ https://${server_name}$1 permanent; } serve ...

  2. TextView、EditText

    1.TextView     显示文本信息 常用属性: layout_width/height    控件的宽/高 width/heigth    文本区域的宽/高 text 显示的文本 textSi ...

  3. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

  4. 移动端超级好用的reset.css(只做参考哦具体以你们实际项目需求为准)

    html { color: #333; /*规定主色调,依据业务场景(非必须)*/ background: #F6F6F6; /*规定主背景,依据业务场景(非必须)*/ overflow-y: aut ...

  5. EOS Dawn 3.0 智能合约 -- 新格式

    1.简介 随着EOS Dawn 3.0发布,智能合约的坑又要重新踩了o(╥﹏╥)o:3.0不仅将原来本身就在链里的基础合约独立出来,简单的介绍见3.0合约改变,合约的书写方式也有巨大变化,相比之前更加 ...

  6. Vue 几种常见开局方式

    vue的开局方式五花八门,这里列几种常见的. 我们先建立一个app.vue来当入口文件,即所有页面都会以这个组件为模板. <template> <div id="app&q ...

  7. 关于apache access log 统计的那些事儿

    统计APACHE ACCESS.LOG IP访问记录 可以根据自己的需要,统计很多,每个IP访问多少个页面等等! cat access.log-20090904 |awk '{print $3}'|s ...

  8. ERROR: HHH000091: Expected type: java.sql.Timestamp, actual value: java.lang.Integer

    在将MySql的数据对应到Java的实体类的时候, 遇到了错误 关键点: Hibernate从mysql数据库查出来的Timestamp类型的数据, 会被Hibernate(或者是数据库连接池Drui ...

  9. OpenCV2:第一章 图像表示

    一.简介 在OpenCV中,可以用C++语法的Mat类来表示一张图像 也可以用C语法的lpllmage或CvMat结构体来表示一张图像 1.单通道像素值 2.多通道像素值 OpenCV默认颜色顺序为B ...

  10. 在windows下.NET CORE 与Consul简单使用

    0)基本概念 consul常用于服务发现 [微服务] web_Api \ \   ->注册服务                                          raft选举le ...