你的 Z 函数处理如果是从 1 枚举到 m ,你会 TLE 29pts (AC #1 #4 #9 #10)。
原因是你第一次去处理的时候会使 l=1,r=m,这样做会导致后面的 r 永远不会比现在的 r 大,从而不会更新 l 。l 永远为 1 的后果就是每次 i-l+1 都会等于 i,所以每次 z[i] 的初值都是 0,这样算法就会退化为 O(n2)O(n^2)O(n2) 的暴力扩展。
l=1,r=m
i-l+1
z[i]