Given a string s, return the longest palindromic substring in s.
Example 1: Input: s = “babad” Output: “bab” Explanation: “aba” is also a valid answer.
Example 2: Input: s = “cbbd” Output: “bb”
Constraints:
1 <= s.length <= 1000sconsist of only digits and English letters.
解法一:暴力解
沒打算用暴力解,因此跳過
解法二:從中間擴增
時間複雜度:
原因:同時要考奇數、偶數情況
原理

程式碼
class Solution {
public String longestPalindrome(String s) {
if (s.length() == 1 || s.length() == 0) {
return s;
}
String maxStr = "";
for (int i = 0; i < s.length(); i++) {
String first = expendFromCenter(s, i, i);
String sec = expendFromCenter(s, i, i + 1);
if (first.length() > maxStr.length()) {
maxStr = first;
}
if (sec.length() > maxStr.length()) {
maxStr = sec;
}
}
return maxStr;
}
public String expendFromCenter(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
return s.substring(left + 1, right);
}
}解法三:Manacher’s Algorithm
好處:當input為偶數時,不用跑兩次中心點,因此對比解法二:從中間擴增時間複雜度較少。
時間複雜度:
Manacher’s Algorithm – Linear Time Longest Palindromic Substring – Part 1
[演算法] Manacher’s Algorithm 筆記](https://medium.com/hoskiss-stand/manacher-299cf75db97e) longest palindromic substring 演算法整理 (Manacher’s algorithm)