这道题的关键点在于,对于字符串的赋值操作要谨慎,尽量采用记录下标的方式,而不是整个字符串的赋值,这样可以节省时间。
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; } }