前些日子写了一篇KMP算法的博文,浅谈数据结构之KMP(串中的模式匹配算法),在这片文章中,谈到了一个模式串K值的记录数组

next[],详细可看那篇文章,其实,前面定义的next[]数组是有一定缺陷的,下面我面我将针对一种情况进行举例:

如上图,如果按照之前的方法所获取的next[]数组的话,当两个字符串匹配到上图的情况是,将会出现如下图的情况:

我们发现,从step1到step3所走的路都是浪费的,因为都是用同一个字母(a)和b去比,而这个计算机也是哼容易识别的,所以对于

next[]的改进是行的通的。

究其原因,为什么我会说上面的3个步骤是白走的呢,以为这是三个连续的相等的a,因此我们可以从第一步直接跳到第四步,即:得到的数组next[j] = k,而模式串p[j] = p[k],当主串中的s[i] 和 p[j] 匹配失败时,不需要再和p[k]比较,而直接和p[next[k]]进行比较,当然可以一直迭代往前。

即:

代码如下:

void get_nextVal(SString T, int nextVal[])
{
int i = , j = ;
nextVal[] = ; while( i <= T[])
{
if(j == || T[i] == T[j])
{
j++;
i++;
if(nextVal[i] == nextVal[j])
{
nextVal[i] = nextVal[j];
}
else
{
nextVal[i] == j;
} }
else
{
j = nextVal[j];
}
} }

注意,所求的永远是前一个的K(写给自己的)嘻嘻~~~~~~

最新文章

  1. Struts2第一个入门案例
  2. Huffman树实现_详细注释
  3. Zend_Frameowrk中进行多语言国际化的相关的配置和使用
  4. SQLite数据库使用
  5. Leetcode3:Longest Substring Without Repeating Characters@Python
  6. re正则表达式
  7. vs xamarin android StartActivity
  8. [转]SQLITE3 C语言接口 API 函数简介
  9. Find Minimum in Rotated Sorted Array II
  10. 1-4-1 Windows应用程序组成及编程步骤
  11. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo
  12. iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.”
  13. zookeeper[2] zookeeper原理(转)
  14. 升级Android ADT 和SDK
  15. JavaWeb核心编程之Tomcat安装和配置
  16. css2.1实现圆角边框
  17. Alluxio 1.5集群搭建
  18. junit4初体验
  19. css控制元素高度自适应
  20. LeetCode算法题-Base 7(Java实现)

热门文章

  1. 认识Backbone (四)
  2. ./startup.sh: Permission denied
  3. HR筒子说:程序猿面试那点事
  4. Shuttle ESB(四)——宣布订阅模式实例介绍(1)
  5. Java中Integer类的方法
  6. Project_2007关键
  7. 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)
  8. gdb经常使用的命令
  9. ROADS+dijkstra的灵活运用+POJ
  10. Android视频通话Java代码