Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
Solution:
Tips:
1. palindromic has 2 cases, one is odd, the other is even.
2. we can judge these 2 cases from middle to the sides.
Java Codes:
public class Solution {
public String longestPalindrome(String s) {
if (1 == s.length()) {
return s;
}
// for odd
int maxLen = 0, leftIdx = 0;
for (int i = 1; i < s.length(); i++) {
int left = i - 1;
int right = i;
while (left >= 0 && right < s.length()) {
if (s.charAt(left) != s.charAt(right)) {
break;
}
left--;
right++;
}
if (maxLen < right - left - 1) {
maxLen = right - left - 1;
leftIdx = left + 1;
}
}
if (s.length() < 3) {
return s.substring(leftIdx, leftIdx + maxLen);
}
// for even
for (int i = 1; i < s.length() - 1; i++) {
int left = i - 1;
int right = i + 1;
while (left >= 0 && right < s.length()) {
if (s.charAt(left) != s.charAt(right)) {
break;
}
left--;
right++;
}
if (maxLen < right - left - 1) {
maxLen = right - left - 1;
leftIdx = left + 1;
}
}
return s.substring(leftIdx, leftIdx + maxLen);
}
}