Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S.

Assumptions

  • There exists one unique longest palindromic substring.

  • The input S is not null.

Examples Input: "abbc" Output: "bb" Input: "abcbcbd" Output: "bcbcb"

public class Solution {
  public String longestPalindrome(String input) {
    if (input.length() == 0) return input;
    
    int result = 1;
    int start = 0, end = 0;
    for (int i = 0; i < input.length(); i++){
      int oddExpand = expand(input, i, i);
      int evenExpand = expand(input, i , i + 1);
      int maxLen = Math.max(oddExpand, evenExpand);
      if (maxLen > result){
        result = maxLen;
        if(maxLen % 2 == 0){
          start = i - maxLen / 2 + 1;
        } else {
          start = i - maxLen / 2;
        }
        end = i + maxLen / 2;
      }
    }
    return input.substring(start, end + 1);
  }

  private int expand(String input, int left, int right){
    while((left >= 0 && right < input.length()) && input.charAt(left) == input.charAt(right)){
      left--;
      right++;
    }
    return right - left - 1;
  }
}

TC: O(N^2)

SC: O(1)

Last updated

Was this helpful?