Oggi vediamo il seguente esercizio di LeetCode:

Given two strings s and t, return true if t is an anagram of s, and false otherwise.

Possiamo risolvere questo problema confrontando le versioni ordinate delle due stringhe, come nel codice proposto.

L’idea chiave è:

  • controlliamo subito se le due stringhe hanno lunghezze diverse
  • se sì, non possono essere anagrammi
  • convertiamo entrambe le stringhe in array di caratteri
  • ordiniamo i due array
  • confrontiamo i caratteri posizione per posizione
  • se troviamo una differenza, le stringhe non sono anagrammi
  • se tutti i caratteri coincidono, allora sono anagrammi

Questo approccio permette di ottenere una complessità O(n log n) a causa dell’ordinamento. È una soluzione semplice e intuitiva, anche se non la più efficiente: si può migliorare utilizzando una struttura di conteggio delle frequenze per raggiungere una complessità O(n).

function isAnagram(s: string, t: string): boolean {
    
    if(s.length != t.length){
        return false;
    }else{
        let sArray = s.split('');
        let tArray = t.split('');
        sArray.sort();
        tArray.sort();
        for(let i = 0; i < sArray.length; i++ ){
            if (sArray[i] != tArray[i]){
                return false;
            }
        }
        return true;
    }

};

Se hai dubbi in merito non esitare a contattarci sui nostri social, saremo più che felici di risponderti :)