public class Main {
public static void main
(String[] args
) { System.
out.
println(countPalindromes
(s
)); }
public static int countPalindromes
(String s
) { int n = s.length();
boolean[][] dp = new boolean[n][n];
int maxlen = 0;
// Length = 1 (single characters)
for (int i = 0; i < n; i++) {
dp[i][i] = true;
maxlen=1;
}
// Length = 2
for (int i = 0; i < n - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
dp[i][i + 1] = true;
maxlen=2;
}
}
// Length >= 3
for (int len = 3; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = i + len - 1;
if (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
dp[i][j] = true;
maxlen=len;
}
}
}
return maxlen;
}
}
cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZyBzID0gImFhYSI7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvdW50UGFsaW5kcm9tZXMocykpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50UGFsaW5kcm9tZXMoU3RyaW5nIHMpIHsKICAgICAgICBpbnQgbiA9IHMubGVuZ3RoKCk7CiAgICAgICAgYm9vbGVhbltdW10gZHAgPSBuZXcgYm9vbGVhbltuXVtuXTsKICAgICAgICBpbnQgbWF4bGVuID0gMDsKCiAgICAgICAgLy8gTGVuZ3RoID0gMSAoc2luZ2xlIGNoYXJhY3RlcnMpCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgZHBbaV1baV0gPSB0cnVlOwogICAgICAgICAgICBtYXhsZW49MTsKICAgICAgICB9CgogICAgICAgIC8vIExlbmd0aCA9IDIKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09IHMuY2hhckF0KGkgKyAxKSkgewogICAgICAgICAgICAgICAgZHBbaV1baSArIDFdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIG1heGxlbj0yOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBMZW5ndGggPj0gMwogICAgICAgIGZvciAoaW50IGxlbiA9IDM7IGxlbiA8PSBuOyBsZW4rKykgewogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuIC0gbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIGludCBqID0gaSArIGxlbiAtIDE7CgogICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09IHMuY2hhckF0KGopICYmIGRwW2kgKyAxXVtqIC0gMV0pIHsKICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgbWF4bGVuPWxlbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1heGxlbjsKICAgIH0KfQ==