字元雜湊 二分答案求最長回文串

2021-10-07 02:48:42 字數 621 閱讀 6380

給乙個字串,求出其中是回文串的子串的最大長度

例如:aaaaaa

6baaaaac

5遍歷每個字元,以他為中心,向兩邊遍歷,時間複雜度o(n2)

可以看到是非常慢的

就比如取個質數p =131

字串 aabbcc

他的雜湊值為

(a-a+1)*p^5+ (a-a+1)*p^4+ (b-a+1)*p^3+ (b-a+1)*p^2+ (c-a+1)*p^1+ (c-a+1)p^0

那麼很顯然,兩個字串雜湊值相等,他們字串不相等的可能性很低很低很低

接著字串

p1 aab

p2 aabc

他們雜湊值的關係是什麼呢?

p2 =p1p+c-a

也就是說我們可以拿雜湊來把字串的字首值和處理得出,同理,字尾和也行

那麼其實就很簡單了

我們求字首和和字尾和的時間複雜度是o(1)

aaabaaa

左右對稱就叫回文

那麼有乙個很顯然的點

假如以字串中乙個點為中心,他的最大對稱半徑為r

那麼r這滿足二分答案的單調性

我們直接判斷字首和和字尾和是否相等即可

時間複雜度o(n*log(n))

回文子串的最大長度 雜湊,二分

題目鏈結 如果乙個字串正著讀和倒著讀是一樣的,則稱它是回文的。給定乙個長度為 n 的字串 s,求他的最長回文子串的長度是多少。輸入將包含最多 30 個測試用例,每個測試用例佔一行,以最多 1000000 個小寫字元的形式給出。輸入以乙個以字串 end 開頭的行表示輸入終止。對於輸入中的每個測試用例,...

leetcode 409 最長回文串 字元雜湊

給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。回文字...

求字串的最長回文字串

題目描述 現給定乙個已知的字串str,現在想要在o n 的時間複雜度之內求出乙個最長的回文子字串 正著和倒著順序讀一致 演算法總結第三彈 manacher演算法,前面講了兩個字串相演算法 kmp和拓展kmp,這次來還是來總結乙個字串演算法,manacher演算法,我習慣叫他 馬拉車 演算法。相對於前...