中心展开法,因为有两种回文子串的中心形式
abba,子串长度为偶数,中心在 i 和 i+1 之间
aba,子串长度为奇数,中心在第 i 个位置
故在某个字符串中,如果存在回文子串,那么他的形式就是这两种,所以代码定义了两种 len 来分别表示这两种情况
其中substring函数返回的子串是 [start,end],而最后 end+1 是因为substring要求输入的是最后一个字符下标加一,也就是实际上 [start,end+1)
class Solution {
public String longestPalindrome(String s) {
if(s == null || s.length() < 1) return "";
int star = 0, end = 0;
for(int i = 0; i < s.length(); i++){
int len1 = find(s,i,i);
int len2 = find(s,i,i+1);
int len = Math.max(len1,len2);
if(len > (end - star)){
star = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(star,end + 1);
}
public int find(String s,int left,int right){
int l = left,r = right;
while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
l--;
r++;
}
return r-l-1;
}
}