给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"

输出: "bab"

注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"

输出: "bb"


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

LeetCode 原题传送门

Q.E.D.


知识的价值不在于占有,而在于使用