給定乙個字串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 很明顯可以使用暴力破解,也可以使用動態規劃,但是還是馬拉車演算法比較靠譜,但是我這裡只是有了...