Verificare daca doua cuvinte sunt anagrame – siruri de caractere C++
Sa se verifice daca doua cuvinte citite de la tastatura sunt anagrame. Doua cuvinte sunt anagrame daca ele contin aceleasi caractere, dar intr-o ordine diferita. Ex : ‘informatica’ si ‘romaticafin’. Pentru aceasta, am sortat cele 2 cuvinte si le-am comparat cu functia strcmp.
Exemplu:
Spor la lucru! Daca aveti intrebari nu ezitati sa le lasati in comentarii, va vom raspunde cat de repede putem 🙂
Cum se poate scrie programul respectiv cu un vector de frecventa, pt a nu schimba ordinea literelor?
Salut! Trebuie sa declari un vector sa zicem frecv[25] (presupunem ca nu avem decat
litere mici ale alfabetului englez). Dupa care, parcurgi primul cuvant litera cu litera
si la fiecare iteratie faci frecv[a[i] – ‘a’]++. Acum in vectorul frecv[] o sa ai frecventele din primul cuvant. In continuare, parcurgi al doilea cuvant si faci frecv[b[i] – ‘a’]– (scazi
frecventele). La sfarsit nu trebuie decat sa parcurgi vectorul frecventa. Daca vreun
element e diferit de 0, atunci cuvintele nu sunt anagrame.
Mi se pare extrem de ineficient sa sortezi literele cuvintelor in ordine alfabetica si sa compari la final cuvintele date. Problema se poate rezolva mult mai eficient.