Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
public String longestPalindrome(String s) {
if (s.isEmpty())
return "";
if (s.length() == 1)
return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.length();) {
//如果小,则不可能会比max_len大了,停止
if (s.length() - i <= max_len / 2)
break;
int j = i, k = i;
while (k < s.length() - 1 && s.charAt(k + 1) == s.charAt(k))
++k; // Skip duplicate characters.
i = k + 1;
//k为回文开始的index
while (k < s.length() - 1 && j > 0 && s.charAt(k + 1) == s.charAt(j - 1)) {
++k;
--j;
} // Expand.
int new_len = k - j + 1;
if (new_len > max_len) {
min_start = j;
max_len = new_len;
}
}
return s.substring(min_start, min_start + max_len);
}