用最小表示法返回最小表示串(字典序最小的同構串)第乙個字元在原始串中的下標。
用兩個指標i,j,i初始化為0,j初始化為1,用k表示當前已經匹配串的長度。如果str[i+k]==str[j+k],j++,否則如果str[i+k]>str[j+k],說明以i開始的同構串肯定不是最小的,並且以i開始的到以i+k開始的都不會是最小的,因為若以i+x開頭,0<=x<=k,那麼這時以j+x開頭的串比這個串小,因為前面相等,比較到i+k和j+k發現str[j+k]小,因此就把i移到i+k+1。同理如果str[i+k]>str[j+k],把j移到j+k+1,如果i==j,j++。直到i,j,k中有乙個大於等於串的長度為止。最後返回i和j裡較小的那個。
int min_express(char* str){
int len=strlen(str),i=0,j=1,k=0;
while(i
字串迴圈同構的最小表示法
迴圈字串的最小表示法的問題可以這樣描述 對於乙個字串s,求s的迴圈的同構字串s 中字典序最小的乙個。由於語言能力有限,還是用實際例子來解釋比較容易 設s bcad,且s 是s的迴圈同構的串。s 可以是bcad或者cadb,adbc,dbca。而且最小表示的s 是adbc。對於字串迴圈同構的最小表示法...
最小表示法(迴圈同構串)
長度為n的序列,迴圈同構串中字典序最小的就是最小表示 序列 4 3 2 1 它的迴圈同構串為 3 2 1 4 2 1 4 3 1 4 3 2 其中字典序最小的就是1 4 3 2 我們最先想到的就是暴力列舉 判斷 可以對所給序列進行列舉所有的字典序,然後找出最小的字典序即可,但是我們列舉 判斷的時間複...
字串最小表示法
最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...