بعد تحسين وظيفة البادئة (للحصول على تفاصيل هنا ) ، نحصل على الخوارزمية النهائية باستخدام O (n) المقاربات:
المتجه & lt؛ int & gt؛ span > prefix_function (string s) { int n = ( int ) طول () ؛ المتجه & lt؛ int & gt؛ span > بي (ن) ؛ لـ strong> ( int i = 1 ؛ i & lt؛ n؛ ++ i) { int j = pi [i - 1 < / span>]؛ while (j & gt؛ 0 & amp؛ & amp؛ s [i] ! = s [j]) j = pi [j - 1 ]؛ if (s [i] == s [j]) ++ تمتد> ي ؛ pi [i] = j؛ } عودة strong> بي ؛ }
S
N
1
i
نبسب ؛
1000 ms 256 Mb Rules for program design and list of errors in automatic problem checking