MyTetra Share
Делитесь знаниями!
Анаграммы
Время создания: 27.07.2017 14:11
Раздел: Computer - Programming - C++ - Coursera White_Belt

/*

Слова называются анаграммами друг друга,

если одно из них можно получить

перестановкой букв в другом.

Например, слово «eat» можно получить

перестановкой букв слова «tea»,

поэтому эти слова являются анаграммами друг друга.

Даны пары слов, проверьте для каждой из них,

являются ли слова этой пары анаграммами друг друга.


Указание

Один из способов проверки того, являются ли

слова анаграммами друг друга,заключается в следующем:

для каждого слова с помощью словаря подсчитаем,

сколько раз в нём встречается каждая буква.

Если для обоих слов эти словари равны

(а это проверяется с помощью обычного оператора ==),

то слова являются анаграммами друг друга,

в противном случае не являются.


Формат ввода

Сначала дано число пар слов N, затем в N строках

содержатся пары слов, которые необходимо проверить.

Гарантируется, что все слова состоят

лишь из строчных латинских букв.


Формат вывода

Выведите N строк: для каждой введённой пары слов YES,

если эти слова являются анаграммами, и NO в противном случае.

*/


#include <iostream>

#include <string>

#include <map>


using namespace std;


map<char, unsigned int> BuildCharCounters(const string& s)

{

map<char, unsigned int> result;

unsigned int limit = s.size();

for(int i=0; i<limit; ++i)

{

++result[s[i]];

}

return result;

}


int main()

{

int q;

cin >> q;


map<char, unsigned int> first_map;

map<char, unsigned int> second_map;

string first_string;

string second_string;


while(q)

{

cin >> first_string >> second_string;

first_map = BuildCharCounters(first_string);

second_map = BuildCharCounters(second_string);


if(second_map == first_map)

cout << "YES" << endl;

else

cout << "NO" << endl;

--q;

}

system("pause");

return 0;

}

Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования