class Leecode5 {
public String longestPalindrome(String s) {
int n = s.length();
boolean dp[][] = new boolean[n][n];
String ans = "";
for (int k = 0; k < n; k++) {
for (int i = 0; i+k<n; i++) {
int j=i+k;
if (i==j) dp[i][j]=true;
else if(j==i+1) dp[i][j]= (s.charAt(i)==s.charAt(j));
else dp[i][j]= s.charAt(i)==s.charAt(j)&&dp[i+1][j-1];
if(dp[i][j]&&(j-i+1>ans.length())) ans = s.substring(i,j+1);
}
}
return ans;
}
}
我看的是最简单的动态规划解法
最需要注意的是,动态转移方程中,dp[i][j]= s.charAt(i)==s.charAt(j)&&dp[i+1][j-1];
说明在填表的时候,当前状态是由其表格左下方的值决定的,因此填表时,我们不能一行一行的来填,而是应该一列一列填!因此列循环应该在行循环的上面!