都是一個類型的題,1961是2406的加強版
下面舉個例子來說明一下l/(l-next[l])就是重複次數
i 1 2 3 4 5 6 7
s: a b c c c a b
next: 0 0 0 0 0 1 2
l-next[l]=5,就相當於現在我們得到了s的一個子串:abccc
顯然這裏拿abcccab去除abccc的結果是 商1餘ab是除不盡的,所以l%(l-next[l])!=0時是不存在最小重複子串的
而我們這裏得到的abccc是可能 的最小重複子串
下面來證明一下:
假設有這麼一個字符串
如果s[a..b]==s[c...d],也就是說,b..c沒有被算進去,就是a..c沒有前綴和後綴是一樣的,很顯然next[d]的值肯定是小於l/2的。
l%(l-next[l])!=0.這樣的字符串是不存在最小重複子串的就像前面說的abcccab就是這種類型
如果存在最小重複子串那麼,next[d]就可以有next[a..b]也就是可以由前面的next[]來構成我們在構造next時候就是這麼構造的,
if(B[j+1]==B[i])
j++;
這裏l-next[l]得到的就是a...b因爲後面的next都可以由前面的得到,那麼b..d肯定也是有a..b組成的,a..b就是它的最小重複子串。
重複次數就是l/(l-next[l])