Adloun

Toutes les occurrences d'un facteur

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 3 — Boucles imbriquées et complexité quadratique

Énoncé

Écrire une fonction positions_facteur(m, s) qui renvoie la liste de toutes les positions où le motif m débute dans le texte s (y compris en cas de chevauchements). Tester sur positions_facteur("aa", "aaaa").

Corrigé

def positions_facteur(m: str, s: str) -> list:
    pos = []
    n, p = len(s), len(m)
    for i in range(n - p + 1):
        j = 0
        while j < p and s[i + j] == m[j]:
            j += 1
        if j == p:
            pos.append(i)  # On mémorise la position sans arrêter la boucle
    return pos

assert positions_facteur("aa", "aaaa") == [0, 1, 2]
assert positions_facteur("ana", "banane") == [1, 3]

La complexité de l'algorithme est en .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.