刚才看了(连接写的翻译,把kmp算法的工作过程讲的很不错,kmp算法的核心是next,next为什么要那么赋值?其实就是前缀和后缀的最大匹配值,用这个值在匹配失败的时候可以跳过一个不必要的匹配。
 
移动的位数 = 已匹配的字符数 - 对应部分的匹配值(也就是前缀和后缀的最大相等值)。
为什么要这么移动呢?其实仔细想想也是可以明白的,首先必须明白被匹配的串是不会移动的,我们不会回去再重新匹配,所以只能移动模式串,模式前缀和后缀相等的很明显是可以不用在匹配了,比较感性的理解。
 
这是求next数组的函数
void FindNext(char s[], int next[])
{///因为匹配的时候当前不成功要找寻前面匹配成功的,所以当前保存前面的串,方便操作
int j=-, i=, len = strlen(s);
next[] = -;
while(i < len)
{
if(j==- || s[i]==s[j])
next[++i] = ++j;
else
j = next[j];
}
}

 

最新文章

  1. 【Unity Shaders】学习笔记
  2. MySQL问题记录--python插入中文至MySQL提示SQLErroor:1366错误
  3. /etc/hosts文件设置不对导致Jboss启动失败
  4. Windows7给C盘扩容
  5. maven总结3
  6. [Design Pattern] Mediator Pattern 简单案例
  7. 在CG/HLSL中访问着色器属性(Properties)
  8. leetcode[70] Simplify Path
  9. linux ssh连接不自动断开
  10. 纯css实现select下拉框并排显示
  11. C++ STL的一些操作
  12. photoshop改变图片大小,不改变像素
  13. windows下Qt播放flash
  14. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2
  15. 流水的新技术,铁打的Linux
  16. c# mvc 获取 HtmlHelper 表达式值和时间格式化 去边框
  17. WAS启动报错Service failed to start. startServer return code = -1
  18. 去除eclipse的validating
  19. Gitlab-system-hooks
  20. DFS剪枝,最大团,POJ(1419)

热门文章

  1. Oracle数据库用户数据完整备份与恢复
  2. noip 2010 关押罪犯 (二分图染色 并茶几)
  3. .net框架介绍
  4. HDU5308-脑补-对拍
  5. MD5加密相关
  6. android 9Path图片的使用
  7. android 调用系统相机
  8. JavaScript设计模式之工厂模式
  9. terminal命令
  10. 利用Warensoft Stock Service编写高频交易软件