5 最長回文子串

2021-08-18 04:10:05 字數 1180 閱讀 1147

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。

示例:

輸入: "babad"

輸出: "bab"

注意: "aba"也是有效答案

示例:

輸入: "cbbd"

輸出: "bb"

方法1: 用馬拉車演算法(字串動態規劃)來求最長回文子串時間複雜度可以達到o(n).

但是部落格裡面有個小失誤:這個id應該不是最大回文字串中心的位置,而是所有的回文子串中,能延續到最右端的位置的那個回文子串的中心點位置,mx是回文串能延伸到的最右端的位置,這個應該沒錯,是id錯了,兩個沒對應上。我一開始按照id是最大回文字串中心的位置來寫了一段**,也過了,後來發現根本不對,那樣的話時間複雜度就達不到o(n),因為比如說乙個特別特別長的字串,一開始有乙個最大回文子串,然後接下來的那些字串匹配的時候就都用不上前面的匹配結果,都需要匹配很多次,時間複雜度就達不到o(n)了。rescenter是最大回文子串的中心位置才對。

#include#include#include#include using namespace std;

string manacher(string s)

vectorp(t.size(), 0);

int id = 0, mx = 0,i, rescenter=0, reslength=0;

for (i = 1; i < t.size(); ++i)

if (p[i] > reslength)

}return s.substr((rescenter - reslength) / 2, reslength - 1);

}int main()

方法2:採用中心點擴散的方法,時間複雜度是o(n^2)。把字元之間加上'#',避免分奇偶兩種情況討論。

class solution 

for(int i=0; i=0 && q+1if(re.size()< q-p+1)

}for(char x: re)

}return final_re;

}};

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s k len s olist...

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 這道題比較船艇的應該是dp求法,但鄙人的dp特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...

5 最長回文子串

題目描述 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 很明顯可以使用暴力破解,也可以使用動態規劃,但是還是馬拉車演算法比較靠譜,但是我這裡只是有了...