public static void reserver(String s){
StringBuffer sb=new StringBuffer();
sb.append("$#");
for (int i=0;i<s.length();i++){
sb.append(s.charAt(i));
sb.append('#');
}
char[] ca=sb.toString().toCharArray();
int[] tag=new int[ca.length];
int mid=0,right=0;
int len=0,index=0;
for (int i=1;i<ca.length;i++){
tag[i]=i<right?Math.min(tag[2*mid-i],right-i):1;
while (tag[i]+i<ca.length&&ca[tag[i]+i]==ca[i-tag[i]]){
tag[i]++;
}
if (tag[i]+i>right){
right=tag[i]+i;
mid=i;
}
if (tag[i]>len){
len=tag[i];
index=i;
}
}
System.out.println("最长回文子串:"+String.valueOf(s.toCharArray(),(index-len)/2,len-1));
}
原文:https://www.cnblogs.com/duangL/p/11684053.html