最长回文数_最长回文 9月18日学习笔记

中心扩散算法:
我们知道回文串一定是对称的,所以我们可以每次循环选择一个中心,进行左右扩展,判断左右字符是否相等即可。
最长回文数_回文串_02
由于存在奇数的字符串和偶数的字符串,所以我们需要从一个字符开始扩展,或者从两个字符之间开始扩展,所以总共有 n+n-1 个中心。

public String longestPalindrome(String s) {
        if (s.length() < 1 ||s==null){
            return "";
        }
        int l = 0,r = 0;
        for (int i = 0;i<s.length();i++){//i如果不等于0,直接从1开始 长度为2的回文数会出错
            int len1 = expandcenter(s,i,i);//调用中心扩散算法
            int len2 = expandcenter(s,i,i+1);
            int len = Math.max(len1,len2);//找到最长的长度
            if (len > r-l){//最长回文数的左右坐标
                l = i-(len-1)/2;
                r = i+len/2;
            }
        }
        return s.substring(l,r+1);
    }
    private int expandcenter(String s, int l, int r){
        while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
            l--;
            r++;
        }
        return r-l-1;//返回的长度
    }