下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、O(n)回文子串算法 這里,我介紹一下O(n)回文串處理的一種方法。Manacher算法.原文地址: 其實原文說得是比較清楚的,只是英文的,我這里寫一份中文的吧。 首先:大家都知道什么叫回文串吧,這個算法要解決的就是一個字符串中最長的回文子串有多長。這個算法可以在O(n)的時間復(fù)雜度內(nèi)既線性時間復(fù)雜度的情況下,求出以每個字符為中心的最長回文有多長, 這個算法有一個很巧妙的地方,它把奇數(shù)的回文串和偶數(shù)的回文串統(tǒng)一起來考慮了。這一點一直是在做回文串問題中時比較煩的地方。這個算法還有一個很好的地方
2、就是充分利用了字符匹配的特殊性,避免了大量不必要的重復(fù)匹配。 算法大致過程是這樣。先在每兩個相鄰字符中間插入一個分隔符,當(dāng)然這個分隔符要在原串中沒有出現(xiàn)過。一般可以用#分隔。這樣就非常巧妙的將奇數(shù)長度回文串與偶數(shù)長度回文串統(tǒng)一起來考慮了(見下面的一個例子,回文串長度全為奇數(shù)了),然后用一個輔助數(shù)組P記錄以每個字符為中心的最長回文串的信息。Pid記錄的是以字符strid為中心的最長回文串,當(dāng)以strid為第一個字符,這個最長回文串向右延伸了Pid個字符。 原串: w aa bwsw f d
3、0; 新串: # w # a # a # b # w # s # w # f # d #輔助數(shù)組P: 1 2 1 2 3 2 1 2 1 2 1 4 1 2 1 2 1 2 1 這里有一個很好的性質(zhì),Pid-1就是該回文子串在原串中的長度(包括#)。如果這里不是特別清楚,可以自己拿出紙來畫一畫,自己體會體會。當(dāng)然這里可能每個人寫法不盡相同,不過我想大致思路應(yīng)該是一樣的吧。 好,我們繼續(xù)?,F(xiàn)在的關(guān)鍵問題就在于怎么在O(n)時間復(fù)雜度內(nèi)求出P數(shù)組了。只要把這個P數(shù)組求出來,最長回文子串就可以直接掃
4、一遍得出來了。 由于這個算法是線性從前往后掃的。那么當(dāng)我們準備求Pi的時候,i以前的Pj我們是已經(jīng)得到了的。我們用mx記在i之前的回文串中,延伸至最右端的位置。同時用id這個變量記下取得這個最優(yōu)mx時的id值。(注:為了防止字符比較的時候越界,我在這個加了#的字符串之前還加了另一個特殊字符$,故我的新串下標(biāo)是從1開始的)好,到這里,我們可以先貼一份代碼了。1. void pk( 2. 3. int i; 4. int mx = 0; 5. int id; 6.
5、; for(i=1; i 7. 8. if( mx > i 9. pi = MIN( p2*id-i, mx-i ; 10. else 11. pi = 1; 12.
6、0; for(; stri+pi = stri-pi; pi+ 13. 14. if( pi + i > mx 15. 16. mx = pi + i; 17. &
7、#160; id = i; 18. 19. 20. 代碼是不是很短啊,而且相當(dāng)好寫。很方便吧,還記得我上面說的這個算法避免了很多不必要的重復(fù)匹配吧。這是什么意思呢,其實這就是一句代碼。if( mx > i pi = MIN( p2*id-i, mx-i ;就是當(dāng)前面比較的最遠長度mx>i的時候,Pi有一個最小值。這個算法的核心思想就在這里,為什么P數(shù)組滿足這樣一個性質(zhì)呢? (下面的部分為圖片形式) 看完這個算法,你有可能會覺得這種算法在哪會用到呢?其實回文串后綴數(shù)組也可以做。只是復(fù)雜度是O(n log n)的,而且一般情況下也不會刻意去卡一個log n的算法。可正好hdu就有這么一題,你用后綴數(shù)組寫怎么都得T(當(dāng)然應(yīng)該是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理創(chuàng)新創(chuàng)意比賽
- 江蘇省連云港市灌南華僑高級中學(xué)2017-2018學(xué)年高一下學(xué)期期中考試歷史試題
- 二手車市場趨勢預(yù)測與前瞻性分析考核試卷
- 公路養(yǎng)護工程環(huán)境保護措施實施考核試卷
- 溫室覆蓋用纖維材料的研發(fā)考核試卷
- 鐵路工程建筑暖通空調(diào)系統(tǒng)節(jié)能考核試卷
- 中石油西北銷售分公司招聘筆試題庫2024
- 四川國檢檢測有限責(zé)任公司招聘筆試題庫2024
- 集裝箱安全標(biāo)準化與全球合規(guī)考核試卷
- 生物質(zhì)能源在海洋能利用的技術(shù)創(chuàng)新考核試卷
- 06-項目五-商業(yè)銀行客戶維護
- 公司分割離婚協(xié)議2024年
- 2024足球競賽規(guī)則全套解讀
- 2024新蘇教版一年級數(shù)學(xué)冊第二單元第3課《6~9減幾的減法》課件
- 2024年四川能投長寧電力限公司員工招聘(高頻重點提升專題訓(xùn)練)共500題附帶答案詳解
- 2024年統(tǒng)編版新教材語文小學(xué)一年級上冊第五單元檢測題及答案
- 2024年中國科學(xué)院金屬研究所職能部門崗位招聘(遼寧)(高頻重點提升專題訓(xùn)練)共500題附帶答案詳解
- 2024-2030年中國核聚變能行業(yè)運行效益與未來發(fā)展前景預(yù)測報告
- 2024年安徽省中考數(shù)學(xué)真題試卷及答案解析
- 2024年中國電信河南分公司校園招聘(高頻重點提升專題訓(xùn)練)共500題附帶答案詳解
- DL∕T 1396-2014 水電建設(shè)項目文件收集與檔案整 理規(guī)范
評論
0/150
提交評論