Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 3 · Application directe du cours

Toutes les occurrences d'un facteur

Boucles imbriquées et complexité quadratique · niveau 1 (application)

É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 .

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre