結論
通過next陣列,可以得到字串的最小迴圈節。
設字串s的結尾下標為i,next[i]=j,如果\(\left\j\ne0\\i\%(i-j)==0\end\right.\)成立,那麼s[j+1,i]就是字串的最小迴圈節。
簡要說明
————————
1 x j
————————
y i
設s[x,j]=s[j,i]
由於s[1,j]=s[y,i],並且
s[1,j]=s[1,x]+s[x,j]
s[y,i]=s[y,j]+s[j,i]
所以s[1,x]=s[y,j]
——————
1 x
——————
y j
和之前的情況相同。
所以如果字串是由重複的s[j+1,i]組成的,那麼s[j+1,i]就是字串的迴圈節。
由於next陣列的性質,s[j+1,i]也是字串的最小迴圈節,因為如果有更小的迴圈節,next[i]的值也會變大,直到不存在更小的迴圈節。
相關題目
hdu1358 period
求每個字首串的最大週期。
hdu3746 cyclic nacklace
最少在字串頭尾新增幾個字元,使得從開頭到某個位置和從某個位置到結尾的兩段字元相同,並且兩段字元無重疊部分。
KMP演算法求字串的最小迴圈節
說到求字串的最小迴圈節就不得不提及kmp演算法 因為要求迴圈節,還需要用到kmp演算法的next陣列 kmp演算法本來是用來求乙個串中是否包含另乙個串,或者說乙個串是否為另乙個串的子串 kmp演算法詳解,看不懂算我輸 如果kmp演算法理解其原理了,那麼這道題也是非常簡單的 用了kmp中的next陣列...
魔法權值(字串排列 最小迴圈節)
程式設計題 魔法權值 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 給出 n 個字串,對於每個 n 個排列 p,按排列給出的順序 p 0 p 1 p n 1 依次連線這 n 個字串都能得到乙個長度為這些字串長度之和的字串。所以按照這個方法一共可以生成 n 個字串。乙...
KMP next陣列求最小迴圈節
假設字串長度為len,那麼最小的迴圈節cir len next len 如果有len cir 0並且cir len,那麼這個字串就是已經是完美的字串,不用新增任何字元 如果cir len,那麼說明最小的迴圈節長度為m,那麼至少還需m個 如果不是完美的那麼需要新增的字元數就是cir len len c...