该问题来自牛客题库。Leetcode也有一样的问题,不过leetcode要求的是返回substring,这里需要返回长度
解题思路
这题估计也不用多介绍了,最长回文子串也算是很常见的编程问题了,之前自己也做过,所以只是按照以前做的又做了一遍。
这里用的是ExpandFromMiddle方法。需要注意的就是,在计算end和start的下标时,需要自己在纸上算一算,看看规律。
import java.util.*;
public class Solution {
public int getLongestPalindrome(String s) {
if(s==null || s.length()<1)return 0;
int start = 0;
int end = 0;
for(int i = 0; i<s.length();i++){
int len1 = expandFromMiddle(s, i, i);
int len2 = expandFromMiddle(s, i, i+1);
int len = Math.max(len1, len2);
if(len > end-start){
//这里需要在纸上写一下发现规律
start = i - (len-1)/2;
end = i + (len/2);
}
}
return end+1-start;
}
public int expandFromMiddle(String s, int left, int right){
if(s==null || left>right)return 0;
while(left>=0 && right<s.length() && s.charAt(left) == s.charAt(right)){
left--;
right++;
}
return right - left - 1;
}
}