樸素演算法
令 i=0,j=1,其中i指向最小表示的位置,j指向比較位置:
若 s[i]>s[j],則:i=j,j=i+1
若 s[i]s[j+k],則:i=j,j=i+1
否則 j++
最後返回 i 即可
最小表示演算法
令 i=0,j=1,那麼:
若 s[i]>s[j],則:i=j,j=i+1
若 s[i]s[j+k],則:i=i+k
否則 j++
//最小表示法
intget_minstring
(char
*s)}
return
min(i,j)
;//返回i,j中最小的
}
最大表示演算法
//最大表示法
intget_maxstring
(char
*s)}
return
min(i,j)
;}
跟最小表示法唯一不同的是在比較大小相等時儲存 j 而不是 i
之後比較指標移動取最小值都與最小表示法類似
分析過程跟最小表示法一致
——詳細見大佬部落格
字串處理 最小表示法
迴圈陣列中,使用字典序最小的乙個序列來表示這個陣列。例如a 5 則最小表示法為。輸入兩組資料,這兩組資料都是迴圈陣列或者環狀陣列,判斷這兩組資料是否一致?設兩個陣列分別為a,b。正常解題思路 使用兩個for迴圈進行o n n 次判斷即可 kmp方法 將a複製乙份加到a後面,然後再a中查詢是否存在b字...
字串的最小最大表示法O n
以下介紹內容內容 網上看了這篇文章後還是感覺有些地方講的沒有詳細的證明所以新增了一點 紅色字是博主寫的 求字串的迴圈最小表示 上面說的兩個字串同構的,並沒有直接先求出min s 而是通過指標移動,當某次匹配串長時,那個位置就是min s 而這裡的問題就是 不是給定兩個串,而是給出乙個串,求它的min...
字串最小表示法
最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...