
    Given a customer's historical transaction pattern represented as a sequence of numeric codes, determine the length of the longest repeating symmetrical behavior pattern that could indicate consistent financial habits. The symmetrical pattern can be formed by selecting transaction codes that appear in the same order when read from both forward and backward directions, even if they are not consecutive in the original sequence.
    

    
def lps(str):
    """
    Given a customer's historical transaction pattern represented as a sequence of numeric codes, determine the length of the longest repeating symmetrical behavior pattern that could indicate consistent financial habits. The symmetrical pattern can be formed by selecting transaction codes that appear in the same order when read from both forward and backward directions, even if they are not consecutive in the original sequence.
    

    """
def lps(str):
    """
    Given a customer's historical transaction pattern represented as a sequence of numeric codes, determine the length of the longest repeating symmetrical behavior pattern that could indicate consistent financial habits. The symmetrical pattern can be formed by selecting transaction codes that appear in the same order when read from both forward and backward directions, even if they are not consecutive in the original sequence.
    

    """
    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]