///定義:
/*求解問題:n個字串圍成乙個環,請從這個環中找出字典序最大(或最小)的
長度為n的字串(下標盡可能小)
*////**:
/*
**name:最小表示法
**function:求解迴圈字串的最小字典序串
**輸入引數:字串+字串長度
**輸出引數:從某下標開始所得到的串字典序最小&&下標最小
**複雜度:o(n)
*/#include#include#includeusing namespace std;
int minr(char s,int l)
return min(i,j); //返回位置靠前的下標
}int main()
/***name:最大表示法
**function:求解迴圈字串的最大字典序串
**輸入引數:字串+字串長度
**輸出引數:從某下標開始所得到的串字典序最大&&下標最小
**複雜度:o(n)
*/#include#include#includeusing namespace std;
int maxr(char s,int l){
for(int i=0;is[j+k],則i滑動到i+k+1處,否則j滑動到j+k+1處,若移動完後i==j,則j++,
繼續執行步驟②,如果i或j有乙個超過len,執行步驟④
④返回i和j小的那個,就是答案
技巧:將字串完全複製一遍接在原字串的後面,就可以模擬出乙個環
*/
字串的最小 大表示法
想象一下,把乙個字串圍成乙個圈,再次字元圈的任意一處斷開,將會得到乙個新的字串。在按此法生成的字串中,字典序最小的稱為原字串的最小表示法,最大的稱為原字串的最大表示法。那麼,我們怎麼求乙個字串的最小 大表示法呢?思路一 直接把這n個字串構造出來,然後排序。時間複雜度o n logn o nlogn ...
字串的最小 大 表示法
迴圈字串的最小表示法的問題可以這樣描述 對於乙個字串s,求s的迴圈的同構字串s 中字典序最小的乙個。由於語言能力有限,還是用實際例子來解釋比較容易 設s bcad,且s 是s的迴圈同構的串。s 可以是bcad或者cadb,adbc,dbca。而且最小表示的s 是adbc。對於字串迴圈同構的最小表示法...
字串最小表示法
最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...