腾讯五十题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;
    }
}
上一篇:算法40 leetcode 155.最小栈


下一篇:C++的数据类型操作 - queue