想不到时隔两年回来重新学习KMP算法还是那么难,不过理解了大概,把例程贴上来,如果是求数量只需要加个count变量记录即可。

#include"stdio.h"
#include"string.h" void makeNext(const char P[],int next[])
{
int q,k;
int m=strlen(P);
next[]=;
for(q=,k=;q<m;q++)
{
while(k>&&P[q]!=P[k])
k=next[k-];
if(P[q]==P[k])
{
k++;
}
next[q]=k;
}
} int kmp(const char T[],const char P[],int next[])
{
int n,m;
int i,q,count=;
n=strlen(T);
m=strlen(P);
makeNext(P,next);
for(i=,q=;i<n;i++)
{
while(q>&&P[q]!=T[i])
q=next[q-];
if(P[q]==T[i])
{
q++;
}
if(q==m)
count++;
}
return count;
} int main( )
{
int n,next[];
char str1[],str2[];
scanf("%d",&n);
while(n--)
{
memset(next,,sizeof(next));
scanf("%s",str1);
scanf("%s",str2);
printf("%d\n",kmp(str2,str1,next));
}
return ;
}

KMP算法,查询匹配串的个数的更多相关文章

  1. KMP算法,匹配字符串模板(返回下标)

    //KMP算法,匹配字符串模板 void getNext(int[] next, String t) { int n = next.length; for (int i = 1, j = 0; i & ...

  2. KMP算法——字符匹配

     暴力匹配: 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置, ...

  3. KMP算法-字符匹配

    字符匹配模式-KMP算法 j直接跳到了2的位置,因为在之前的都相同. 那么就需要求如果不等了之后,j需要回跳的位置next[j] 如果tk'与tj相等,则next [j+1]=k'+1 如果tk'与t ...

  4. HDU 3613 Best Reward(KMP算法求解一个串的前、后缀回文串标记数组)

    题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...

  5. POJ2406 kmp算法next数组-串的最小循环节/循环周期

    题目链接:http://poj.org/problem?id=2406 题目大意:问给出的字符串最多由多少个子串相乘得来的. 思路:利用next数组的含义来解. 1.一个串的最小循环节长度:len - ...

  6. HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串

    题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...

  7. 基础数据结构-串-KMP算法

    KMP算法用于模式串字符匹配,因为没有提前预习,上课时听得云里雾里,后来回去看了一晚上,翻了一些网上的讲解才理解了.我简单讲一下,我们在一串字符串A里搜索匹配另一段字符串B时,思路最简单方法的就是从第 ...

  8. 串的两种模式匹配方式(BF/KMP算法)

    前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操作之一,而不同的算法实现有着不同的 ...

  9. 串的模式匹配 BF算法和KMP算法

    设有主串s和子串t,子串t的定位就是要在主串中找到一个与子串t相等的子串.通常把主串s称为目标串,把子串t称为模式串,因此定位也称为模式匹配. 模式匹配成功是指在目标串s中找到一个模式串t: 不成功则 ...

随机推荐

  1. mysql中的隐式转换

    在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引.下面分析两种隐式转换的情况 看表结构 phone为 int类型,name为 varchar EXPLAI ...

  2. Asp.net MVC Comet 推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...

  3. HBuilder webApp开发 Websql增删改查操作

    来源:http://blog.csdn.net/zhuming3834/article/details/51471434 这段时间公司要求我们做原生iOS和安卓的都转做H5开发APP,使用的工具HBu ...

  4. Python 定期检查Build_setting的编译情况

    #!/usr/bin/python #_*_ coding:utf-8 _*_ import time from email.MIMEText import MIMEText from email.M ...

  5. HDU 4497 GCD and LCM(数论+容斥原理)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  6. Serv-u只开放21端口连接不上解决方案

    在Serv-U的Local Server -> Settings -> Advanced -> PASV port range里, 填入给PASV模式使用的本地端口范围,如60000 ...

  7. 熟练的使用CIFAR-10数据集

    CIFIR-10是一套包含60000张,大小为32x32的十分类图片数据集,其中50000张被分为训练数据,10000张被分为测试数据,http://www.cs.toronto.edu/~kriz/ ...

  8. 手工编写servlet

    index.jsp: <%@ page language="java" import="java.util.*" contentType="te ...

  9. 第4课 Hello QT

    1. QT的安装 (1)双击:qt-opensource-windows-x86-mingw492-5.6.0.exe (2)安装过程中指定QT Creator安装目录下的mingw文件夹 (3)设置 ...

  10. Python中常见的数据类型总结

    Python提供多种数据类型来存放数据项集合,主要包括序列(列表list和元组tuple),映射(如字典dict),集合(set),下面对这几种一一介绍: 一 序列 1.列表list 列表是一种有序的 ...