求乙個字串中的最長回文序列

2021-06-04 12:22:34 字數 961 閱讀 5769

如題,下面說說我的思路,

我想到的演算法如下:

a. 遍歷字串,找到所有相鄰兩個字母相同的位置(比如aa),加入到鍊錶centers1中,找到所有隔乙個字元相同的位置(比如aba),加入到centers2中,複雜度o(n);

b. 設定最大回文的長度maxlength=2和回文的起始位置start=centers1[0];

c.遍歷centers1,對每乙個位置進行如下操作:

設定head和tail兩個int變數,表示前後到達字元的位置,head=i-1,tail=i+2;

判斷head與tail位置上的字元是否相同,相同則head--、tail++,不同則比較tail-head-1與maxlength的大小,最大值為新的maxlength,start為原值或者head+1;

d.遍歷centers2,對每乙個位置進行如下操作:

設定head和tail兩個int變數,表示前後到達字元的位置,head=i-1,tail=i+3;

判斷head與tail位置上的字元是否相同,相同則head--、tail++,不同則比較tail-head-1與maxlength的大小,最大值為新的maxlength,start為原值或者head+1;

e. 結束對兩個陣列的遍歷後,maxlength即為最大的回文長度,start為回文的起始位置。

分析:步驟c和d的時間複雜度比較不好算,最簡單的情況下,沒有相同的相鄰相同或者隔乙個字元相同的情況,那c和d都不需要時間;最差情況下,所有的字元都相同(aaaaaa),或者字串是間隔相同的(abababa,這種情況的時間複雜度略好與aaaaaa),那麼c和d的複雜度就是0+1+2+...+n/2+...+2+1+0=o(n^2)。平均複雜度不知道該怎麼算,因為字串的平均布局不好處理,你有什麼想法嗎?

leetcode 求乙個字串的最長回文子串

最長回文子串問題 給定乙個字串,求它的最長回文子串長度。如果乙個字串正著讀和反著讀是一樣的,那它就是回文串。給定乙個字串,求它最長的回文子串長度,例如輸入字串 35534321 它的最長回文子串是 3553 所以返回 4。最容易想到的辦法是列舉出所有的子串,然後一一判斷是否為回文串,返回最長的回文子...

在乙個字串中找出最長回文子串

如何高效的在乙個字串中找到最長的回文子串呢?下面我們根據 來分析 首先,回文串有兩種,一種是字串的長度是偶數,另一種就是奇數。我們從字串第二個字元開始,我們把當前起始字元叫做i。先檢驗奇數長度的字串,對比該字元的前乙個和後乙個 i 1 和 i 1 一共三個字元 奇數個 如果前後字元相同則說明是回文串...

在乙個字串中查詢最長回文子串

先講一下自己的思想 1.設定三個指標ppre,pre,post,依次指向字串第乙個,第二個,第三個。判斷第乙個和第二個 回文子串長度為偶數時 判斷第乙個和第三個 回文子串長度為奇數時 設定乙個num size 陣列記錄回文子串的長度,乙個ptr size 指標陣列記錄回文子串的第乙個子串。2.首先將...