最大 最小表示法模板

2021-09-26 00:02:50 字數 759 閱讀 8398

用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開頭和j開頭的有k個相同的字元,固執行 i = i + k +1

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

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

#include#includeusing namespace std;

int getmin(string s)

else if(j + l + 1 > i) j = j + l + 1;

else j = i + 1;

}return i < j ? i : j;

}int getmax(char *s)

else if(i+k+1 > j) i = i+k+1;

else i = j+1;

k = 0;}}

return i < j ? i : j;

}string s;

int main()

}} puts("");

} return 0;

}

最小表示法 模板

最小表示法就是對於乙個迴圈字串,其字典序最小的狀態 顯然任意乙個迴圈串的最小表示法是唯一的,那麼可以同過比較兩個迴圈串的最小表示法來判斷它們是否相同 對於樸素演算法 初始化 i 0,j 1,k 0 若 s i s j j 若 s i s j i j,j 若 s i s j 則 k 直至 s i k ...

模板 最小表示法

字串的最小表示是該字串的所有迴圈同構串中字典序最小的那個串。根據其迴圈同構結構,採用破環成鏈,即 倍增的形式來表示。引理 若兩個迴圈同構串 s i k 則對於任意的 i in i,i k 均不可能是最優解。證明 s i k 所以對任意的 i in i,i k 有串 s j p 其中 i p j p ...

最大最小表示法

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