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.
Insert '#' before and after each element, so that there are '#' at each even position and original elements at each odd position. Iterate over the "new" string and use each element as the middle point, check whether the left side is identical to the right side, and count the length of the Palindromic substring. Return the substring of maximum length.
public class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() <= 1) {
return s;
}
int max = 0;
String res = new String();
for (int i = 1; i < s.length() * 2; i++) {
int count = 1;
while (i - count >= 0 && i + count <= s.length() * 2 && getChar(s, i - count) == getChar(s, i + count)) {
count++;
}
count--;
if (count > max) {
max = count;
res = s.substring((i - count) / 2, (i + count) / 2);
}
}
return res;
}
private char getChar(String s, int i) {
if (i % 2 == 0) {
return '#';
} else {
return s.charAt(i / 2);
}
}
}