思路:暴力法的改进
class Solution { public String longestPalindrome(String s) { if(s==null||s.length()==0)return s ; int length=s.length(); boolean[][] P=new boolean[length][length];//P[a][b]表示下标[a][b]这个范围组成的子串是不是回文子串 int maxlen=0;//目前最长子串长度 String max="";//最长子串 for(int i=0;i<length;i++)//长度为1,只有一个字符,肯定是回文串 { P[i][i]=true; } for(int i=0;i<length-1;i++)//长度为2的子串,看俩字符是否相等,相等的话就是回文串 { P[i][i+1]=(s.charAt(i)==s.charAt(i+1)); } for(int len=1;len<=length;len++)//所有长度(肯定没有这么多,可以接着判定) { for(int start=0;start<length;start++) { int end=start+len-1;//子串长度为len时,终点的下标 if(end>=length)//此时下标过界, { break; } if(start==end||start==end-1)//子串只有一个或俩字符时,P已经有了 { if (P[start][end] && len > maxlen) { max = s.substring(start, end + 1); } } else//子串不止两个时 { P[start][end]=P[start+1][end-1]&&(s.charAt(start)==s.charAt(end)); if (P[start][end] && len > maxlen) { max = s.substring(start, end + 1); } } } } return max; } }