思路:根据标签里的动态规划,很容易想到判断[x,y]处是不是回文,就要先判断[x+1,y-1]是不是回文(这里要注意偶数问题)。
用一个二维数组p[][]记录从start处开始到end处结束的字符串是否为回文,存值为0代表不是回文或没遍历过,为1代表是回文。
那么这里其实重难点在于判定赋值为1的条件构成和循环的嵌套与边界值
class Solution { public String longestPalindrome(String s) { int length=s.length(); int maxlength=0; String maxPal=""; int P[][]=new int[length][length]; for(int i=0;i<length;i++){ for(int j=0;j<length;j++){ P[i][j]=0; } } for(int i=0;i<length;i++){ P[i][i]=1; } for(int len=1;len<=length;len++){ for(int start=0;start<length;start++){ int end=start+len-1; if(end>=length){ break; } if((len==1||len==2||P[start+1][end-1]==1)&&s.charAt(start)==s.charAt(end)){ P[start][end]=1; } if(len>maxlength&&P[start][end]==1){ maxlength=len; maxPal=s.substring(start, end+1); } } } return maxPal; } }