一道字符串匹配的题目,仅仅借此题练习一下KMP

因为这道题目就是要求用从头开始的n个字符串去匹配原来的字符串,很明显与KMP中求next的过程很相似,所以只要把能够从头开始匹配一定个数的字符串的个数加起来就OK了(再此结果上还应该加上字符串的长度,因为每个从头开始的字符串本身也可以去匹配自己的),即将next中值不为-1和0的个数统计出来即可。

用GCC编译的,时间用了46MS。

 #include <stdio.h>
#include <string.h>
#define MAXLEN 200005
#define MOD 10007 int next[MAXLEN];
char myChar[MAXLEN]; int getNext()
{
int i = ,j = -;
int sum = ;
int len = strlen(myChar);
memset(next,,sizeof(int)); next[i] = j; while(i < len)
{
if(j == - || myChar[i] == myChar[j])
{
i ++;
j ++;
next[i] = j;
if(j != - && j != )
{
sum ++;
sum = sum % MOD;
}
}
else
{
j = next[j];
}
} return sum;
} int main()
{
int n,m; scanf("%d",&n);
while(n --)
{
scanf("%d",&m);
memset(myChar,,sizeof(char));
scanf("%s",myChar);
printf("%d\n",(getNext()+m)%MOD);
} return ;
}

代码如下:

最新文章

  1. monkey之monkey命令详解
  2. ns3重要类
  3. c# htmtToPDF
  4. iOS给图片添加滤镜&amp;使用openGLES动态渲染图片
  5. Sql 中text类型字段判断是否为空
  6. ios学习之UIViewControl生命周期
  7. JS实现操作成功定时回到主页效果
  8. Eclipse 复制按钮卡死
  9. 复习下 AJAX
  10. Linux日常使用指令大全
  11. SQL中的事物【转】
  12. Elasticsearch简单介绍
  13. 【linux】内核make编译链接相关变量定义
  14. Android Volley 之自己定义Request
  15. Three.js 保存camera(视角)设置到数据库,包括场景的缩放、旋转、移动等
  16. Python【第二课】 字符串,列表,字典,集合,文件操作
  17. 花十分钟,让你变成AI产品经理
  18. CodeForces Global Round 1
  19. DGUT_FLY退役贴 &amp;&amp; FunCfans毕业总结-竞赛篇
  20. EM算法——Expectation-Maximization

热门文章

  1. C#学习笔记四: C#3.0自动属性&amp;匿名属性及扩展方法
  2. onclick事件对动态参数类型为字符串的处理
  3. NeHe OpenGL教程 第十六课:雾
  4. sqlserver函数大全
  5. PDF出力相关资料
  6. 更换ubuntu apt-get 源
  7. java io InputStream 转 byte
  8. ppm与mg/m3转换
  9. PS 查看选定图层的高宽
  10. (easy)LeetCode 258.Add Digits