美文网首页
Rabin-Karp子字符串查找算法

Rabin-Karp子字符串查找算法

作者: Jeanz | 来源:发表于2017-12-27 09:37 被阅读0次

    适合于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++;
      }

    相关文章

      网友评论

          本文标题:Rabin-Karp子字符串查找算法

          本文链接:https://www.haomeiwen.com/subject/oddyextx.html