本篇非原创,我想了很久想不到简单的方法,观摩了一下运行最快的范例,在此贴出,以供日后复习。
class Solution {
public String longestPalindrome(String s) {
if (s.length()<=1) return s;
//开始和结束位置
int[] range= new int[]{0,1};
char[] ca= s.toCharArray();
for (int i=0; i<ca.length; i++) {
//可以加速查找
i=helper(ca, range, i);
}
return s.substring(range[0], range[1]);
}
private int helper(char[] ca, int[] range, int index){
int lo=index, hi=index;
//往前找到第一个不一样的地方
while(hi<ca.length-1 && ca[hi]==ca[hi+1]) hi++;
//下一个搜索的位置
int ret=hi;
//从两边对比看是否一致
while(hi<ca.length-1 && lo>0 && ca[hi+1]==ca[lo-1]){
hi++;
lo--;
}
//如果大于最长的那个
if (hi-lo+1>range[1]-range[0]){
range[0]=lo;
range[1]=hi+1;
}
//返回下次寻找地址
return ret;
}
}
7ms