
    Given a string of historical transaction codes from a loan applicant's banking history, determine the length of the longest pattern of transactions that reads the same forwards and backwards, as such patterns may indicate stable, recurring financial behavior. The transaction codes are represented as a sequence of alphanumeric characters, and the pattern can skip transactions but must maintain the same relative order when read from either direction.
    

    
def lps(str):
    """
    Given a string of historical transaction codes from a loan applicant's banking history, determine the length of the longest pattern of transactions that reads the same forwards and backwards, as such patterns may indicate stable, recurring financial behavior. The transaction codes are represented as a sequence of alphanumeric characters, and the pattern can skip transactions but must maintain the same relative order when read from either direction.
    

    """
def lps(str):
    """
    Given a string of historical transaction codes from a loan applicant's banking history, determine the length of the longest pattern of transactions that reads the same forwards and backwards, as such patterns may indicate stable, recurring financial behavior. The transaction codes are represented as a sequence of alphanumeric characters, and the pattern can skip transactions but must maintain the same relative order when read from either direction.
    

    """
    n = len(str)
    L = [[0 for x in range(n)] for x in range(n)]
    for i in range(n):
        L[i][i] = 1
    for cl in range(2, n + 1):
        for i in range(n - cl + 1):
            j = i + cl - 1
            if str[i] == str[j] and cl == 2:
                L[i][j] = 2
            elif str[i] == str[j]:
                L[i][j] = L[i + 1][j - 1] + 2
            else:
                L[i][j] = max(L[i][j - 1], L[i + 1][j])
    return L[0][n - 1]