Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

LA2 | Torneio 3 (2022/2023) | Filtra


'''
Implemente a seguinte função que dada uma lista de strings filtra as strings
que podem ser obtidas intercalando os caracteres das strings a e b também dadas
como parâmetro. Uma string s intercala as strings a e b sse apenas contem 
caracteres de a e b e todos os caracters de a e b aparecem pela mesma 
ordem em s. Sugere-se que comece pode definir recursivamente uma função 
auxiliar que testa se uma string s intercala as strings a e b, e que depois
optimize essa função com as técnicas de memoization e programação dinâmica.
'''


def intercalado(s, a, b, dic={}):
    if len(s) == 0:
        return True
    if (s, a, b) in dic:
        return dic[(s, a, b)]

    res = False
    if len(a) > 0 and a[0] == s[0]:
        res = intercalado(s[1:], a[1:], b, dic)
    if not res and len(b) > 0 and b[0] == s[0]:
        res = intercalado(s[1:], a, b[1:], dic)

    dic[(s, a, b)] = res
    return res


def filtra(strings, a, b):
    filtrado = []
    for str in strings:
        if intercalado(str, a, b):
            filtrado.append(str)
    return filtrado


Testes

# 1
strings = ["ACDB","ABCD","ADCB"]
> Resultado = ["ACDB","ABCD"]

# 2
strings = ["ACDABC","ABCACD","AACCBC","AABCDC"]
> Resultado = ["ACDABC","ABCACD","AABCDC"]

retroceder