最长回文子串

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

示例 1:

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

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

package my;

public class LongestPalindromeSubstring {
    public String longestPalindrome(String s){
        if(s== null ||s.length()<1){
            return "";
        }
        //初始化最大回文子串的起点和终点
        int start =0;
        int end =0;
        //遍历每个位置,当做中心位
        for(int i=0;i<s.length();i++){
            int len1=expandCenter(s,i,i);
            int len2=expandCenter(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);
    }
    /**
     *
     * @param s             输入的字符串
     * @param left          起始的左边界
     * @param right         起始的右边界
     * @return              回文串的长度
     */
    public int expandCenter(String s, int left,int right){
        // left = right 的时候,此时回文中心是一个字符,回文串的长度是奇数
        // right = left + 1 的时候,此时回文中心是一个空隙,回文串的长度是偶数
        // 跳出循环的时候恰好满足 s.charAt(left) != s.charAt(right)
        while(left >=0 && right < s.length() && s.charAt(left) == s.charAt(right)){
            left --;
            right++;
        }
        // 回文串的长度是right-left+1-2 = right - left - 1
        return right - left - 1;
    }
    public static void main(String [] args){
        String str ="ebababd";
        LongestPalindromeSubstring lps =new LongestPalindromeSubstring();
        String  s = lps.longestPalindrome(str);
        System.out.println(s);
    }
}
原文地址:https://www.cnblogs.com/goodtest2018/p/13562880.html