Rabin-Karp子字符串查找算法

适合于strstr函数

我们要在字符串s(长度为n)里面寻找t(长度为k)

在s里面顺序遍历,由于计算长度与t相同的字串的hash值, 时间复杂度为O(k), 所以后面一个字串的hash值可以是之前的字串在常数时间求得。

Brute-force时间复杂度为O(mn), KMP是O(m+n)

首先建立lookup table
a b a b c
0 0 1 2 0
j为当前的index, 如果不匹配,下一个去比较的index是a[j-1]

建立lookup table的方法类似于KMP
len = 0, 表示pattern的index, i为str的index

  1. if(p[len] == str[i]) res[i] = len; i++, len++;
  2. if(p[len]!=str[i]) {
    if(len!=0) len = res[len-1];
    else index++;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容