5 最長回文子串

2021-09-20 21:11:31 字數 857 閱讀 7927

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

輸入: "babad"

輸出: "bab" 注意: "aba" 也是乙個有效答案。

方法一:暴力法(超出時間限制)

思路:時間複雜度o(n^3),空間負責度o(n),用於儲存s的最大長度

​以長度length進行for迴圈 for(length=str.legnth();length>0;length--)

對擷取的字串進行判斷,若是回文字串則返回,否則繼續遍歷​

string longestpalindrome(string s) 

//符合回文字串

if (i >= len / 2)

return str;

} }return "";

}

方法二:中心向外擴散方法

思路:時間複雜度o(n^2)

若s_ij為回文字串,且s_(i-1)==s_(j+1),則s_i-1,j+1也為回文字串

討論s開始長度為奇數或偶數

int max = -1;

string ans = ""; //記錄最長回文字串

void getpalindromestr(int i, int j, string s)

--i;

++j;

} else }}

string longestpalindrome(string s)

return ans;

}

方法三:manacher演算法

本人水平有限,還未完全理解。

貼出講解該演算法的部落格:

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 方法1 用馬拉車演算法 字串動態規劃 來求最長回文子串時間複雜度可以達到o n 但是部落格裡面有個小失誤 這個id應該不是最大回文...

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特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...