Metti che hai come stringa iniziale 'lezione di python' e stai controllando la coppia chiave-valore 'zeio': 'an', cominci a controllare la stringa per vedere se trovi quasi-anagrammi della chiave, per fare questo devi controllare tutte le sottostringhe che hanno lunghezza len(chiave)+1, perché il quasi-anagramma è formato dai caratteri della chiave più un carattere spurio.
N.b. le chiavi possono avere lunghezza diversa tra di loro, inoltre possono avere caratteri uguali all'interno.
Prendi la prima sottostringa di lunghezza 5 che trovi in 'lezione di python': 'lezio'. Come individui il carattere spurio? Puoi procedere a costruire n nuove sottostringhe, per esempio tramite slice e concatenazione, andando a togliere di volta in volta un carattere. Non puoi sapere qual è il carattere spurio, quindi devi valutare se almeno una sottostringa che ottieni è un anagramma della chiave. Quindi da 'lezio' ottieni le sottostringhe 'ezio', 'lzio', 'leio', 'lezo' e 'lezi' che hanno la stessa lunghezza della chiave, controlli a questo punto se una delle sottostringhe è anagramma della chiave, trovi che 'ezio' è anagramma di 'zeio', quindi 'lezio' è un quasi-anagramma di 'zeio', perché ha al suo interno l'anagramma della chiave + il carattere spurio 'l'. Hai trovato una sostituzione da fare, devi prendere il quasi-anagramma 'lezio' e sostituirlo con il valore della chiave, in questo caso 'an', ottieni la nuova stringa 'anne di python' (questa nuova stringa dovrà essere sottoposta di nuovo a controllo per ogni coppia chiave-valore).
Prendiamo ora la seconda sottostringa che trovi di lunghezza 5 in 'lezione di python': 'ezion', ripetendo il procedimento sopra, trovi che anche questa sottostringa è un quasi-anagramma della chiave, perché ha al suo interno l'anagramma della chiave 'zeio' + il carattere spurio 'n', quindi puoi effettuare la sostituzione anche qui ed ottieni la nuova stringa 'lane di python' (anche questa da ricontrollare).
Prendiamo ora la terza sottostringa che trovi di lunghezza 5 in 'lezione di python': 'zione', ripetendo il procedimento sopra, trovi che anche questa sottostringa è un quasi-anagramma della chiave, perché ha al suo interno l'anagramma della chiave 'zeio' + il carattere spurio 'n', quindi puoi effettuare la sostituzione anche qui ed ottieni la nuova stringa 'lean di python' (anche questa da ricontrollare).
Prendiamo ora la quarta sottostringa che trovi di lunghezza 5 in 'lezione di python': 'ione ', ripetendo il procedimento sopra, trovi che questa sottostringa non può essere quasi-anagramma di 'zeio'.
E così via...
Tutto questo da fare per qualsiasi coppia chiave-valore del dizionario.
Ogni sostituzione che fai genera una nuova stringa che dovrai trattare come se fosse la stringa iniziale del tuo programma. Devi raccogliere poi tutte le stringhe all'interno delle quali non si possono fare più sostituzioni e restituire un set con quelle più corte.
Cerca di implementare la ricorsione per controllare le nuove stringhe che ottieni.