1. 程式人生 > >z-fun 字串小板子 待整理

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