字串最小表示法(1) 樸素演算法

2021-06-26 04:04:35 字數 573 閱讀 2980

迴圈字串的最小表示法的問題可以這樣描述:

對於乙個字串s,求s的迴圈的同構字串s』中字典序最小的乙個。

由於語言能力有限,還是用實際例子來解釋比較容易:

設s=bcad,且s』是s的迴圈同構的串。s』可以是bcad或者cadb,adbc,dbca。而且最小表示的s』是adbc。

對於字串迴圈同構的最小表示法,其問題實質是求s串的乙個位置,從這個位置開始迴圈輸出s,得到的s』字典序最小。

一種樸素的方法是設計i,j兩個指標。其中i指向最小表示的位置,j作為比較指標。

令i=0,j=1

如果s[i] > s[j] i=j, j=i+1

如果s[i] < s[j] j++

如果s[i]==s[j] 設指標k,分別從i和j位置向下比較,直到s[i] != s[j]

如果s[i+k] > s[j+k] i=j,j=i+1

否則j++

返回i**如下

int getans(int *s,int lens)

} return i;

}

字串最小表示法 O(n 演算法

網上看了這篇文章後還是感覺有些地方講的沒有詳細的證明所以新增了一點 紅色字是博主寫的 求字串的迴圈最小表示 上面說的兩個字串同構的,並沒有直接先求出min s 而是通過指標移動,當某次匹配串長時,那個位置就是min s 而這裡的問題就是 不是給定兩個串,而是給出乙個串,求它的min s eg min...

模板 字串演算法 字串最小表示法

2014年10月,剛進hdu參加新生賽的時候,就遇到了字串最小表示法的裸題,然而那時什麼都不會的我只得寫暴力,自然tle了。之後在 湖南師範大學第六屆大學生計算機程式設計競賽2b 上,又做到了同樣的裸題。字串演算法 字串最小表示法模板 這是乙個可以用o n 時間解決 字串呈環狀,每一位置都可以作為首...

字串最小表示法

最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...