NEXT陣列與字串最小迴圈節

2022-06-08 20:39:13 字數 750 閱讀 1069

結論

通過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...