題目描述:給定乙個字串 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特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...