/**
* 5、最長迴文子串
*
* 給定一個字符串s,找到s中最長的迴文子串。你可以假設s的最大長度爲1000。
* 示例 1:
* 輸入: "babad"
* 輸出: "bab"
* 注意: "aba" 也是一個有效答案。
*
* 示例 2:
* 輸入: "cbbd"
* 輸出: "bb"
*/
public boolean isPalindromic(String s) {
int len = s.length();
for (int i = 0; i < len / 2; i++) {
if (s.charAt(i) != s.charAt(len - i - 1)) {
return false;
}
}
return true;
}
public String longestPalindrome1(String s) {
if (s.isEmpty()) {
return s;
}
String ans = "";
int max = 0;
int len = s.length();
for (int i = 0; i < len; i++)
for (int j = i + 1; j <= len; j++) {
String test = s.substring(i, j);
if (isPalindromic(test) && test.length() > max) {
ans = s.substring(i, j);
max = ans.length();
}
}
return ans;
}
private int start = 0, maxLen = 0;
public String longestPalindrome2(String s) {
if(s.length() < 1)
return s;
for(int i=0; i<s.length(); i++){
extendPalindrome(s, i, i);
extendPalindrome(s, i, i+1);
}
return s.substring(start, start + maxLen);
}
private void extendPalindrome(String s, int left, int right){
while(left>=0 && right<s.length() && s.charAt(left) == s.charAt(right)){
left--;
right++;
}
if(maxLen < right-left-1){
start = left + 1;
maxLen = right -left - 1;
}
}
更多LeetCode題目解法傳送門