标签:next数组 void ext code i++ pre 第一个 int 不可
目录
void getNEXT() {
int i = 0, j = NEXT[0] =-1;
while (i<Find.size()){
if (j == -1 || Find[i] == Find[j]) {
i++;j++;
NEXT[i] = j;
}
else {
j = NEXT[j];
}
}
}
int FirstKmp() {
int i = 0, j = 0;
while (i < a.size()) {
if (j == -1 || a[i] == Find[j]) {
i++, j++;
if (j == Find.size()) {
return i - j;
}
}
else j = NEXT[j];
}
return -1;
}//在a中找到第一个Find的位置
int ManyKmp() {
int i = 0, j = 0,ans=0;
while (i < a.size()) {
if (j == -1 || a[i] == Find[j]) {
i++, j++;
if (j == Find.size()) {
ans++;
j = NEXT[j];
}
}
else j = NEXT[j];
}
return ans;
} //在a中找几个可以重叠的Find
int ManyKMP() {
int i = 0, j = 0, ans = 0;
while (i < a.size()) {
if (j == -1 || a[i] == Find[j]) {
i++, j++;
if (j == Find.size()) {
ans++;
j = 0;
}
}
else j = NEXT[j];
}
return ans;
}//在a中找几个不可以重叠的Find
如果一个字符串满足 len%(len-next[len])==0,则这个字符串是一个周期串(存在最小循环节),循环次数为 len / ( len-next[len] )
如果 len%(len-next[len])!=0,这个字符串也存在循环节,但是最后一个循环节不完整
标签:next数组 void ext code i++ pre 第一个 int 不可
原文地址:https://www.cnblogs.com/fjqfjq/p/10021685.html