poj 2406 1961 簡單證明

都是一個類型的題,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])

發佈了48 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章