
    Given a student's learning activity sequence, determine the length of the longest balanced learning pattern where activities can be read the same way forward and backward, allowing for skipping some activities while maintaining the order of the remaining ones. For example, in a sequence like "math-science-arts-science-math", finding such patterns could reveal optimal learning cycles that naturally resonate with the student's learning style.
    

    
def lps(str):
    """
    Given a student's learning activity sequence, determine the length of the longest balanced learning pattern where activities can be read the same way forward and backward, allowing for skipping some activities while maintaining the order of the remaining ones. For example, in a sequence like "math-science-arts-science-math", finding such patterns could reveal optimal learning cycles that naturally resonate with the student's learning style.
    

    """
def lps(str):
    """
    Given a student's learning activity sequence, determine the length of the longest balanced learning pattern where activities can be read the same way forward and backward, allowing for skipping some activities while maintaining the order of the remaining ones. For example, in a sequence like "math-science-arts-science-math", finding such patterns could reveal optimal learning cycles that naturally resonate with the student's learning style.
    

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