z-fun 字符串小板子 待整理

求出每个位置从每个位置开始 和 从串的初始开始最多能匹配多少长。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n, z[N];
char s[N];
void init(){
    z[0] = n;
    int j = 1, k;
    for(int i = 1; i < n; i = k){
        if(j < i) j = i;
        while(j < n && S[j] == S[j-i]) j++;
        z[i] = j-i;
        k = i+1;
        while(k + z[k-i] < j)
            z[k]=z[k-i],k++;
    }
}
int main(){
    scanf("%s", s);
    n =  strlen(S);
    init();
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/MingSD/p/10124634.html