要理解KMP最重要的一点就是防止重复的回溯、

!!!很重要!!!很重要!!!很重要

要了解KMP可以去:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html

首先要生成模板串的next数组

 void getNext(char *p,int *next)
{
int j,k;
next[]=-;
j=;
k=-;
while(j<strlen(p)-)
{
if(k==-||p[j]==p[k]) //匹配的情况下,p[j]==p[k]
{
j++;
k++;
next[j]=k;
}
else //p[j]!=p[k]
k=next[k];
}
}

然后来匹配、

 int KMPMatch(char *s,char *p)
{
int next[];
int i,j;
i=;
j=;
getNext(p,next);
while(i<strlen(s))
{
if(j==-||s[i]==p[j])
{
i++;
j++;
}
else
{
j=next[j]; //消除了指针i的回溯
}
if(j==strlen(p))
return i-strlen(p);
}
return -;
}

最新文章

  1. MMORPG大型游戏设计与开发(服务器 AI 事件)
  2. linux 内核cache
  3. C# .Net实现URL绝对路径和相对路径之间互相转换
  4. SCU 4440 分类: ACM 2015-06-20 23:58 16人阅读 评论(0) 收藏
  5. 未能加载文件或程序集“Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342&quot;
  6. iOS UIButton加在window上点击无效果问题
  7. JMS - QueueBrowser
  8. 鸟哥的Linux私房菜 第十八章、认识系统服务 (daemons)
  9. Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
  10. IOS-tableViewCell重用机制
  11. python——BS解析器
  12. 【转】VC中TRACE
  13. js对表单设置了readonly和disabled后的区别
  14. bash: scrapy: command not found
  15. 关于如何登陆oracle 18c pdb 的问题
  16. 软工网络15团队作业4——Alpha阶段敏捷冲刺
  17. 关于 vue 日期格式的过滤
  18. Gradle 从svn 中检出的父项目后处理配置【我】
  19. linux系统监控与硬盘分区/格式化/文件系统管理
  20. bootstrap css布局

热门文章

  1. java贪吃蛇小游戏详解
  2. vue+axios 对restful 请求封装
  3. phpcms 按价格、按销量、按时间等排序实现思路
  4. Directx11教程(31) 纹理映射(1)
  5. Inno Setup生成桌面快捷方式
  6. C++中String字符串查找
  7. HTML5入门指南
  8. 《DL/T 976-2017 带电作业用工具、装置和设备预防性试验规程》中的样品名称及试验项目
  9. 20.libgdx,stage中默认相机的使用
  10. vue插件大全