Java教程

腾讯五十题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;
    }
}
这篇关于腾讯五十题No.2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!