重新記錄一個板子
- 字符串下標從開始(也可以很容易得改成從開始)
- 數組的不是良定義的,默認爲;如果有必要,可以在的最後進行的修改
- 表示右端點最靠右的已匹配串
- 求數組的關鍵在於儘可能利用已求出的數組值
char s[maxn];
int z[maxn];
void getZ() {
int n=strlen(s);
for(int i=1, j=0; i<n; ++i) {
if(i<j+z[j]) z[i]=min(j+z[j]-i,z[i-j]);
while(i+z[i]<n&&s[z[i]]==s[i+z[i]]) z[i]++;
if(i+z[i]>j+z[j]) j=i;
}
}