public class Solution { public String longestPalindrome(String s) { //本题是动态规划思想,构造一个数组pal[i][j],表示从i到j是否为一个回文, //pal[i][j]=true;if i=j; //pal[i][j]=true 当 s[i]==s[j]并且j-i=1; //pal[i][j]=true 当 j>i+1,s[i]==s[j]并且pal[i+1][j-1]=true; int start=0; int end=0; int maxLen=0; int len=s.length(); boolean [][] pal=new boolean[len][len]; for(int i=0;i<len;i++){ for(int j=0;j<len;j++){ pal[i][j]=false; } } for(int j=0;j<len;j++){ //pal[j][j]=true; for(int i=0;i<=j;i++){ /*if(i==j-1)pal[i][j]=s.charAt(i)==s.charAt(j); if(i<j-1){ if(s.charAt(i)==s.charAt(j)&&pal[i+1][j-1]) pal[i][j]=true; }*/ pal[i][j]=(s.charAt(i)==s.charAt(j)&&((j-i<2)||pal[i+1][j-1]));//次判断特别简介,利用了&&和||短路规则 if(pal[i][j]&&maxLen<j-i+1){ maxLen=j-i+1; start=i; end=j; } } } return s.substring(start,end+1); } }