解法 1: 暴力破解
暴力求解,列舉所有的子串,判斷是否為回文串,儲存最長的回文串。
時間複雜度:兩層 for 迴圈o(n²),for迴圈裡邊判斷是否為回文o(n),所以時間複雜度為 o(n³)。超時。
空間複雜度:o(1),常數個變數。
class
solution
}return
true;}
public
: string longestpalindrome
(string s)}}
return ans;}}
;
方法二:中心擴散法
class
solution
}return s.
substr
(start,leng)
;//擷取最長子串
}private
:int
length
(string s,
int l,
int r)
return r-l-1;}};
方法三:動態規劃狀態:dp[i][j]表示子字串s[i,j]是否為回文子串,為閉區間。
狀態轉移方程:dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1],其中dp[i + 1][j - 1] 要考慮邊界情況
class solution
if(dp[i]
[j]&& j-i+
1>maxlen)}}
return s.
substr
(begin,maxlen);}
};
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特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...