其他分享
首页 > 其他分享> > 腾讯五十题No.2

腾讯五十题No.2

作者:互联网

题目链接
2ms 中心扩散:每遍历一个元素就左右扩展

class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()==0) return "";
        //保存起止位置
        int[] range = new int[2];
        char[] str = s.toCharArray();
        for(int i=0;i<str.length;i++){
            i = findLongest(str,i,range);
        }
        return s.substring(range[0],range[1]+1);
    }
    public static int findLongest(char[] str,int l,int[] range){
        //查找中间部分
        int r = l;
        while(r<str.length-1 && str[r + 1] == str[l]){
            r++;
        }
        //定位中间部分的最后一个字符
        int ans = r;
        //从中间向左右扩散
        while(l>0 && r<str.length-1 && str[l-1] == str[r+1]){
            l--;
            r++;
        }
        //记录最大长度
        if(r-l>range[1]-range[0]){
            range[0] = l;
            range[1] = r;
        }
        return ans;
    }
}

标签:return,String,int,rrange,char,range,No.2,腾讯,五十
来源: https://www.cnblogs.com/jianjiana/p/15863561.html