Проблема

Самая длинная палиндромная подстрока

Решение

Время O(n^2), Пространство O(1)

public String longestPalindrome(String s) {
   if (s.isEmpty()) {
      return null;
   } 
   if (s.length() == 1) {
      return s;
   } 
   String longest = s.substring(0, 1);
   for (int i = 0; i < s.length(); i++) {
      // get longest palindrome with center of i
      String tmp = helper(s, i, i);
      if (tmp.length() > longest.length()) {
         longest = tmp;
      }
      // get longest palindrome with center of i, i+1
      tmp = helper(s, i, i + 1);
      if (tmp.length() > longest.length()) {
         longest = tmp;
      }
   } 
   return longest;
}
// Given a center, either one letter or two letter, 
// Find longest palindrome
public String helper(String s, int begin, int end) {
   while (begin >= 0 && end <= s.length() 
                  - 1 && s.charAt(begin) == 
                   s.charAt(end)) {
      begin--;
      end++;
   }
   return s.substring(begin + 1, end);
}

Существует более эффективный способ решения этой проблемы с помощью алгоритма Манахера.
Алгоритм Манахера гораздо сложнее понять, хотя
он дает преимущества временной сложности O(n).
> Этот алгоритм определенно нетривиален, и вы не должны
придумывать такой алгоритм во время собеседования.

Подробнее: http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/