kmp算法是复杂度为O(n+m)的字符串匹配算法;

首先kmp算法的核心是在模式串中获得next数组,这个数组表示模式串的子串的前缀和后缀相同的最长长度;

这样在匹配的过程中如果指到不匹配的位置,模式串用next数组进行跳转到符合的位置,而目标串不需要再往回匹配,为什么是最长的相同的前缀后后缀呢?

因为只有这样才能一边避免可能漏掉的位置,一边尽量不重复已经匹配的位置;

getNext的函数:

void getNext()
{
int k = -,j = ,len = strlen(str);
next[] = -;
while(j < len)
{
if(k == -||str[j] == str[k])
{
j++;
k++;
next[j] = k;//相等的话就往后继续;
}
else k = next[k];//不等的话就相当于kmp一样,把模式串的这个子串用已经求出来的next跳转;
}
}

kmp算法代码:

int kmp()
{
int posP = ,posT = ;
int lenP = strlen(strP),lenT = strlen(strT);
while(posP < lenP&&posT < lenT)
{
if(posP == -||strP[posP] == strT[posT])
{
posP++;
posT++; }
else posP = next[posP];
if(posP == lenP)return posT-lenP;//匹配成功返回匹配成功的位置;
}
return -;//匹配失败哦;
}

最新文章

  1. P4factory &lt;Integration with Mininet&gt;
  2. infragistcs 又
  3. Android:储存方式之SharePreferences
  4. pyqt listwidget下面创建多张图片
  5. 9大理由告诉你为什么应该学习HTML跟CSS
  6. C#中文件管理的运用(Twelfth Day)
  7. Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
  8. 蓝桥杯-逆波兰表达式-java
  9. iOS - Core Animation 核心动画
  10. 环境设置——pyCharm环境下导入MySQLdb遇到的一系列问题
  11. apache配置伪静态Rewrite
  12. apache伪静态配置(URL重写)
  13. Java设计模式之模板模式及使用场景
  14. BufferReader BufferWriter
  15. xadmin自定义关联菜单
  16. Django admin argument to reversed() must be a sequence
  17. 20155202张旭 Exp7 网络欺诈技术防范
  18. MAC下BurpSuit社区版升级pro版
  19. 通过TortoiseGit上传项目到GitHub
  20. CheckBox使用记录

热门文章

  1. robotframework使用之RIDE的底部的日志没显示怎么办?
  2. 迁移EXT4
  3. GenericServlet 、Servlet和httpServler他们之间的关系
  4. c# .net Global.asax文件的作用
  5. C#游戏开发高速新手教程Unity5.5教程
  6. ubuntu 12.10 笔记
  7. WPF converter(包含传递复杂参数)
  8. linux程序设计——网络信息(第十五章)
  9. 安装anaconda及pytorch
  10. 九度OJ 1080:进制转换 (进制转换)