public String longestPalindrome(String s){if(s == null || s.length()<1)return"";int start =0;int end =0;for(int i=0;i<s.length();i++){int len1 =expandAroundCenter(s,i,i);//奇数中心int len2 =expandAroundCenter(s,i,i+1);//偶数中心int len = Math.max(len1,len2);if(len > end - start){
start = i -(len -1)/2;;
end = i + len/2;}}return s.substring(start, end +1);}privateintexpandAroundCenter(String s,int left,int right){int l = left;int r = right;while(l>=0&& r<s.length()&&(s.charAt(l)==s.charAt(r))){
l--;
r++;}return r - l -1;}
方法二(马拉车)
public String longestPalindrome(String s){
String str =preProcess(s);int len = str.length();int[] P =newint[len];int C=0,R=0;for(int i=1;i<len-1;i++){int i_mirror =2* C - i;// = C-(i-C)if(R>i){
P[i]= Math.min(R-i,P[i_mirror]);}else{
P[i]=0;}while(str.charAt(i+1+P[i])== str.charAt(i-1-P[i])){
P[i]++;}if(i+P[i]>R){
C = i;
R = i + P[i];}}// 寻找max P[i]int maxLen =0;int centerIndex =0;for(int i=0;i<len;i++){if(maxLen < P[i]){
maxLen = P[i];
centerIndex = i;}}int start =(centerIndex-maxLen)/2;int end = start + maxLen;
System.out.println(start +"----"+ end);
System.out.println(s.substring(start,end));return s.substring(start,end);}private String preProcess(String s){
StringBuffer sb =newStringBuffer("");
sb.append('^');for(int i=0;i<s.length();i++){
sb.append('#');
sb.append(s.charAt(i));}
sb.append('#');
sb.append('$');return sb.toString();}