字串的最小表示法

2021-08-29 16:05:45 字數 713 閱讀 8783

mbp送去維修的第二天,想他。

給定乙個字串s[1~n],如果我們不斷把它的最後乙個字元放到開頭,會得到n個字串,稱這n個字串是迴圈同構的。這些字串中字典序最小的乙個,稱為字串s的最小表示法。

例如s=「abca」,則它的4個迴圈同構字串為「abca」,「aabc」,「caab」,「bcaa」。 s的最小表示為"aabc"。

這裡討論的是如何在線性時間內求出字串的最小表示。

演算法:初始化i=1, j=2 ; 將長度為n的字串s複製乙份接在它的結尾,得到字串ss , ss中以i開頭,長度為n的串記為b[i]。

通過直接向後掃瞄的方法,比較b[i]與b[j]兩個迴圈同構串。

若i > n,b[j]為最小表示;若j > n b[ji]為最小表示;否則重複第2布。

int n =

strlen

(s+1);

//複製乙份接在後面

for(

int i=

1; i<=n; i++

) s[n+i]

= s[i]

;int i =

1, j =

2, k;

while

(i <= n && j <= n)

else

} ans =

min(i,j)

;// b[ans]為最小表示

字串最小表示法

最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...

字串最小表示法

乙個長度為n的首尾相連的字串可以有n種表示法,例如串 abcd 還可以表示bcda,cdab,dabc當我們面臨這樣的字串的時候,我們很難統計相同字串的個數。因此我們引入一種字串的最小表示法來使這些串變得相同。字串的最小表示法是將原來的字串旋轉得到的字典序最小的串 設字串st的長度為len,我們可以...

字串的最小表示法

定義 給定乙個字串 s 1 n 如果我們不斷把他的最後乙個字元放到開頭,最終會得到 n 個字串,稱這 n 個字串是迴圈同構的。這些字串中字典序最小的乙個,稱為字串 s 的最小表示。例如 s abca 那麼它的 4 個迴圈同構字串為 abca aabc caab bcaa s 的最小表示為 aabc ...