Example 1:
Example 2:
Approach
Steps:
Recursion Approach:
String lps = "";
public String longestPalindrome(String s) {
if (s == null || s.length() <= 1) return s;
for(int i = 0; i < s.length(); i++) {
expandAroundCenter(s, i, i);
expandAroundCenter(s, i, i + 1);
}
return lps;
}
public void expandAroundCenter(String s, int l, int r){
while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
l++;
r--;
if(lps.length() < r - l + 1) {
lps = s.substring(l, r + 1);
}
}
Iterative Approach:
public String longestPalindrome_iterative(String s) {
if (s == null || s.length() <= 1) return s;
String lps = "";
int si = 0, ei = 0;
for(int i = 0; i < s.length(); i++) {
// Odd length substring
int l = i, r = i;
while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
if(lps.length() < r - l + 1) {
lps = s.substring(l, r + 1);
si = l;
ei = r;
}
l--;
r++;
}
// even length substring
l = i;
r = (i < s.length() - 1) ? i + 1 : i;
while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
if(lps.length() < r - l + 1) {
lps = s.substring(l, r + 1);
si = l;
ei = r;
}
l--;
r++;
}
}
return lps;
}