Vision 字串 最小(大)表示法

2021-08-09 00:00:32 字數 809 閱讀 7648

///定義:

/*求解問題: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 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...