
    Given a sequence of street codes representing potential delivery routes, find the longest bidirectional path that can be traveled in the same order from either end, allowing for skipped streets. The length of this optimal bidirectional route will help maximize fleet efficiency during peak hours by enabling delivery vehicles to use the same path sequence for both outbound and return journeys.
    

    
def lps(str):
    """
    Given a sequence of street codes representing potential delivery routes, find the longest bidirectional path that can be traveled in the same order from either end, allowing for skipped streets. The length of this optimal bidirectional route will help maximize fleet efficiency during peak hours by enabling delivery vehicles to use the same path sequence for both outbound and return journeys.
    

    """
def lps(str):
    """
    Given a sequence of street codes representing potential delivery routes, find the longest bidirectional path that can be traveled in the same order from either end, allowing for skipped streets. The length of this optimal bidirectional route will help maximize fleet efficiency during peak hours by enabling delivery vehicles to use the same path sequence for both outbound and return journeys.
    

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