這道題的關鍵點在於,對於字符串的賦值操做要謹慎,儘可能採用記錄下標的方式,而不是整個字符串的賦值,這樣能夠節省時間。spa
public class Solution { public String longestPalindrome(String s) { String res=""; int size=s.length(); int maxLen=0; int maxLeft=0; int maxRight=0; //奇數長度的迴文串 for(int i=0;i<size;i++) { String temp=""; int len=1; temp+=s.charAt(i); int left=i-1; int right=i+1; while(left>=0&&right<size) { if(s.charAt(left)==s.charAt(right)) { //這種寫法太耗時間 //temp=s.charAt(left)+temp; //temp=temp+s.charAt(right); len+=2; left--; right++; } else break; } if(len>maxLen) { maxLen=len; maxLeft=left; maxRight=right; } } //偶數長度的迴文串 for(int i=0;i<size;i++) { String temp=""; int len=0; int left=i; int right=i+1; while(left>=0&&right<size) { if(s.charAt(left)==s.charAt(right)) { //每次都進行一個新的字符串的建立,太消耗時間,這裏只須要記錄 //子串的下標便可 // temp=s.charAt(left)+temp; // temp=temp+s.charAt(right); len+=2; left--; right++; } else break; } if(len>maxLen) { //記錄下最長子串的首尾便可 maxLen=len; maxLeft=left; maxRight=right; } } res=s.substring(maxLeft+1, maxRight); return res; } }