Longest Palindromic Substring

给一个字符串, 返回其中最长的回文子字符串. 这个题非常经典, 做法是写一个辅助方法, 可以从字符串中某一个位置向外找到最长的回文 (利用回文的性质), 然而我们不知道回文是奇数位还是偶数位, 所以我们找的时候, 需要同时考虑.

public class Solution {
    public String longestPalindrome(String s) {
        int start = 0;
        int end = 0;
        for(int i = 0 ; i < s.length(); i++){
            int len1 = expand(s,i,i);
            int len2 = expand(s,i,i+1);
            int len = Math.max(len1,len2);
            if(len > end - start) {
                start = i - (len-1) / 2;
                end = i + len / 2;
            }
        }
        return s.substring(start, end + 1);
    }
    
    public int expand (String s, int l, int r) {
        while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
            l--;
            r++;
        }
        return r - l - 1;
    }
}