最大最小表示法

2021-10-02 06:26:28 字數 710 閱讀 5525

時間複雜度:o(n)

應用:比較兩個環形串是否是同一字串、判重、判同分異構等

判同分異構:都化為最小或最大 看有幾個不一樣的就好了。。放到set裡。。

最小表示法是我在看插頭dp的時候看到的乙個名詞,就先來看了一下這個演算法,還是蠻簡單的,有乙個首位相連的字串,我們要尋找乙個位置,從這個位置向後形成乙個新字串,我們需要使這個字串字典序最小。

我們這裡要i = 0,j = 1,k = 0,表示從i開始k長度和從j開始k長度的字串相同(i,j表示當前判斷的位置)

當我們str[i] == str[j]時,根據上面k的定義,我們的需要進行k+1操作

當str[i] > str[j]時,我們發現i位置比j位置上字典序要大,那麼不能使用i作為開頭了,我們要將i向後移動,移動多少呢?有因為i開頭和j開頭的有k個相同的字元,那麼就執行 i = i + k +1

相反str[i] < str[j]時,執行:j = j + k +1 

最終i和j中較小的值就是我們最終開始的位置

相反如果是最大表示法的話,我們就要求解字典序最大的字串,那麼我們只需要在執行第二或第三個操作時選擇較大的

那個位置較好了

int get_min()

}return i >j ?j :i;

}

最小最大表示法

乙個首位相連的字串,我們要尋找乙個位置,從這個位置向後形成乙個新字串,我們需要使這個字串字典序最小。有乙個字串str,下標為 0 len 我們這裡要i 0,j 1,k 0,表示從i開始k長度和從j開始k長度的字串相同 i,j表示當前判斷的位置 1 當str i k str j k 時 k 2 當st...

最小 最大 表示法

最小表示法是求與某個字串迴圈同構的所有字串中,字典序最小的串是哪個。比如說乙個字串jdrakioi,它長為8,也就是說最多有八種迴圈同構的方法。jdrakioi drakioij rakioijd akioijdr kioijdra ioijdrak oijdraki ijdrakio。這幾個串在原...

最大最小表示法

沒看懂。對。是的。這幾天有點迷。時間複雜度 o n 應用 比較兩個環形串是否是同一字串 判重 判同分異構等 判同分異構 都化為最小或最大 看有幾個不一樣的就好了。放到set裡。最小表示法是我在看插頭dp的時候看到的乙個名詞,就先來看了一下這個演算法,還是蠻簡單的,有乙個首位相連的字串,我們要尋找乙個...