码迷,mamicode.com
首页 > 编程语言 > 详细

KMP匹配算法

时间:2016-09-15 16:33:26      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

  KMP算法可以在O(n+m)的时间数量上完成串的模式匹配操作。

  n指的是主字符串的长度,m指的是模式字符串的长度。

 

  求next数组的算法:

void get_next(char T[], int next[]) {
    i = 1;
    next[1] = 0;
    j = 0;
    while( i <= T[0]) {
        if(j == 0 || T[i] == T[j]) {
            ++i;
            ++j;
            next[i] = j;
        }
        else
            j = next[j];
    }
}

 

  KMP匹配算法:

int KMP(char S[], char T[], int next[], int pos) {
    i = pos;
    j = 1;
    while(i <= S[0] && j <= T[0]) {
        if(j == 0 || S[i] == T[j]) {
            ++i;
            ++j        }
        else
            j = next[j];
    }
}

 

  KMP算法的主要优点是主串不回溯,且在主串与子串有很多“部分匹配”时才显得快。

 

KMP匹配算法

标签:

原文地址:http://www.cnblogs.com/profinder/p/5874928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!