classSolution { public String longestPalindrome(String s) { intlen= s.length(); if (len < 2) return s; intmax=0; intx=0, y = 0;
// dp[i][j]表示从s[i]到s[j]是不是一个回文字符串 boolean[][] dp = newboolean[len][len]; // 只有一个字符一定是回文 for (inti=0; i < len; i++) dp[i][i] = true;
// 根据子串长度循环 for (intl=2; l <= len; l++) { // i表示左边界 for (inti=0; i < len - l + 1; i++) { // j表示右边界 intj= i + l - 1; if (s.charAt(i) == s.charAt(j) && (dp[i+1][j-1] || l == 2)) { dp[i][j] = true; if (l > max) { x = i; y = j; max = l; } } } } return s.substring(x, y + 1); } }