Se dă un număr n și n + 1 cuvinte formate din litere mici ale alfabetului englez. Să se afle numărul de cuvinte (excluzându-l pe primul) care sunt anagrame ale primului cuvânt.
Un cuvânt e anagramă a altui cuvânt dacă ele conțin aceleași litere, nu neapărat în aceeași ordine.
Date de intrare
Pe prima linie se află numărul n. Pe următoarele n + 1 linii se află cuvintele.
Date de ieșire
Programul va afișa numărul cerut.
Restricții
1 ≤ n ≤ 50
Lungimea fiecărui cuvânt este mai mică sau egală cu 100 000.
Exemple
Date de intrare
4
server
revers
serve
sserver
server
Date de iesire
2
Explicație
revers și server sunt anagramele cuvântului server.
Limbaj C++
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <map>
#include <vector>
#include <string>
std::map<char, int> creareDictionar(const std::string& cuvantCurent);
void creareVector(int numarCuvinte, std::vector<std::string>& vectorCuvinte);
int main()
{
int numarCuvinte, contorAnagrame{};
std::cout << "Introdu numarul de cuvinte >> ";
std::cin >> numarCuvinte;
/* vectorul în care salvăm cuvintele */
std::vector<std::string> vectorCuvinte;
creareVector(numarCuvinte, vectorCuvinte);
/* creăm primul dicționar pentru a-l putea compara cu restul */
std::map<char, int> primulDictionar = creareDictionar(vectorCuvinte.at(0));
for (std::size_t i{ 1 }; i < vectorCuvinte.size(); ++i) {
/* creăm dicționarul cuvântului curent */
std::map<char, int> dictionarCurent = creareDictionar(vectorCuvinte.at(i));
/* și dacă cele două dicționare sunt egale => anagramă */
if (primulDictionar == dictionarCurent) {
std::cout << "Cuvantul \"" << vectorCuvinte.at(i) << "\" este anagrama!\n";
contorAnagrame++;
}
}
/* la final afișăm câte anagrame avem */
std::cout << contorAnagrame << "\n";
return 0;
}
void creareVector(int numarCuvinte, std::vector<std::string>& vectorCuvinte)
{
vectorCuvinte.reserve(numarCuvinte + 1);
/* citim cuvântul și-l adăugăm în std::vector */
for (int i{}; i < numarCuvinte + 1; ++i) {
std::string cuvantCitit;
std::cout << "Introdu cuvantul >> ";
std::cin >> cuvantCitit;
vectorCuvinte.push_back(cuvantCitit);
}
}
std::map<char, int> creareDictionar(const std::string& cuvantCurent)
{
std::map<char, int> dictionar;
for (const char& caracterCurent : cuvantCurent) {
/* dacă cheia nu există o adaugă cu valoarea 0 pe care mai apoi o incrementează, dacă există o incrementează */
dictionar[caracterCurent]++;
}
return dictionar;
}