筆記 最小表示法

2022-06-15 08:06:16 字數 979 閱讀 6256

引言

用於判斷兩個字串不計順序是否相等的問題。

[引例]:a = abcd , b = cdba

[分析]:若乙個乙個的列舉的話,時間複雜度高達

由這個簡單的題得出來的簡單思想: 如果兩列數是相同的,那麼他們排完序過後的數列也一定是相同的

專有名詞

迴圈同構

字串s = "abcd",那麼它的迴圈同構就有: "bcda", "cdab", "dabc"

最小表示

字串和它的所有迴圈同構中,字典序最小的那個字串,例如: s = "abcd" 的最小表示為 "abcd" ;

程式所需要做的僅僅就是找到最小表示的第乙個字元在原字串中的下標

如何實現

大致思路如下:

一點也不複雜

定義兩個下標 i = 0, j = 1, 和字串的長度 k = 0, 如果 k 的長度達到 strlen(s), 則找到了最小表示, 而 i 與 j 則是表示比較的兩個迴圈同構的下標

但是從定義上來看,最小表示好像用乙個環來表示更方便,那需要倍長字串嗎?

其實取模就可以解決了

提個建議,從0開始存字串貌似更好?

因為從第 i 個開始,可以直接 s[i + k] 而不必去 +1 或者 -1,比較方便

那思路應該很清楚了:

if(s[i + k] < s[j + k]) j += k + 1 ;

if(s[i + k] > s[j + k]) i += k + 1 ;

if(s[i + k] == s[j + k]) k ++ ;

應用: p1368 【模板】最小表示法

學習筆記 最小表示法

最小表示法 用於解決字串s的迴圈同構串中字典序最小的那個,稱為s的最小表示。eg.s abcd 則其迴圈同構串為 abcd dabc cdab bcda 最小的為 abcd 演算法思路 因為迴圈同構問題,所以可以先複製乙份s到s後邊,形成ss。之後雙指標i,j向後掃瞄,i,j所指代表以i,j為開始的...

學習筆記 最小表示法

給定乙個長度為n,可旋轉的字串環,求從哪個位置斷開的長度為n的字串字典序最小 大 以最小為例,最大同理 bzoj1398 vijos1382尋找主人 necklace 當求出最小表示法之後,掃一遍即可比較兩個不可翻轉的環是否本質相同,比較本質應該是其常見用途吧 1 include2 include3...

學習筆記 最小表示法

一 最小表示法解決的問題 找到乙個字串的迴圈同構串中字典序最小的那個串。二 字串的迴圈同構 比如長度為5字串 abcde 它的5個迴圈同構串有 abcde,bcdea,cdeab,deabc,eabcd 其中字典序最小的串為 abcde 三 求 abcde 的字典序最小的迴圈同構串 1.把 abcd...