写了个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]的最大值。
*/
}
#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) 编辑 收藏 举报