写了个next数组

  

  一直很纠结,上个月那次群赛,一直没有a掉拿到字符串匹配的题目。早上空气好,起来自己再写了一下那个KMP的next数组。

  推荐看一篇博文,里面写得很清楚next数组的产生:http://www.matrix67.com/blog/archives/115

  贴上代码留作纪念吧

 

#include <iostream>
#include 
<cstring>
using namespace std;

//这个next函数,所有的数组,字符串,下标都是从1开始计数的
void GetNext(char *T, int n, int *next)
{
    
for(int i = 0; i < n; i++)
        next[i] 
= 0;

    next[
1= 0;
    
int j = 0, i = 2;
    
for(int i = 2; i < n; i++)    
    {
        
while(j>0 && T[j+1!= T[i]) j = next[j];
        
if(T[j+1== T[i]) j += 1;
        next[i] 
= j;        
    }
    
/*
    在此处总结一下:事实上,T[next[i]] == T[i]的,最初要得到next[i]是
    通过这个规则来计算:
    next[j]应该是所有满足T[1..next[j]] == T[j-next[j]+1..j]的最大值。
    
*/
}

 

 

posted on 2010-04-09 10:19  Ktyanny Home  阅读(325)  评论(1编辑  收藏  举报

导航