This problem was asked by Amazon.

Given a string, find the longest palindromic contiguous substring. If there are more than one with the maximum length, return any one.

For example, the longest palindromic substring of "aabcdcb" is "bcdcb". The longest palindromic substring of "bananas" is "anana".

My Solution(Python):

def longestPalindrome(S: str) -> str:
    # brute force solution
    n = len(S)
    max_length = 0
    for i in range(n):
        for j in range(i+1, n+1):
            substring = S[i:j]
            lsub = len(substring)
            if substring[:lsub//2]==substring[:lsub//2:-1]:
                if lsub >= max_length:
                    longest_palindrome = substring
                    max_length = lsub
    return longest_palindrome

print(longestPalindrome("aabcdcb"))
print(longestPalindrome("bananas"))
print(longestPalindrome("pad"))

def longestPalindrome(S: str) -> str:
    # DP solution
    n = len(S)
    max_length = 1
    is_palindrome = [[None for _ in range(n)] for _ in range(n)]

    for i in range(n):
        is_palindrome[i][i] = True

    longest_palindrome = S[0] #in case we dont get anything later

    for i in range(n-1):
        if S[i] == S[i+1]:
            is_palindrome[i][i+1] = True
            longest_palindrome = S[i:i+2]
            max_length = 2
        else:
            is_palindrome[i][i+1] = False

    for k in range(3, n+1): #k is the length of substring
        for i in range(n-k+1):
            j = i+k
            # print('at k=',k, S[i:j], i, j)
            if is_palindrome[i+1][j-2] and S[i]==S[j-1]:
                # print('Current palindrome', S[i:j])
                if k>max_length:
                    max_length = k
                    longest_palindrome = S[i:j]
                is_palindrome[i][j-1] = True
            else:
                is_palindrome[i][j-1] = False
    # for row in is_palindrome:
    #     print(row)
    return longest_palindrome


print(longestPalindrome("aabcdcb"))
print(longestPalindrome("bananas"))
print(longestPalindrome("pad"))