5. 最长回文子串

135 阅读1分钟

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

输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd" 输出: "bb"

class Solution {
    public String longestPalindrome(String s) {
        if (s == null || s.length() < 1) {
             return "";
         }
        //中心扩展法
        int start=0,end=0;
        for(int i=0;i<s.length();i++){
        //这个是len1从第i个开始左右扩展,发现的回文串
            int len1 = isRight(s,i,i);
        //i和i+1之间扩展
            int len2 = isRight(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);
    }
    
    private int isRight(String s,int start,int end){
        while(start>=0 && end<s.length() && s.charAt(start)==s.charAt(end)){
            start--;
            end++;
        }
        //-1是因为跳出循环的时候,两个指针走到回文字符串的不想等的地方,所以只需要减1.
        return end-start-1;
    }

}