Задача
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
Входные данные
Два слова заданы в отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают 255.
Выходные данные
Следует вывести «YES«, если введенные слова являются анаграммами друг друга и «NO» если нет.
Решение 1
В данной задаче требуется определить являются ли два введенных слова анаграммами. Для этого заведем две отдельные строки и считаем их.
Основная проблема состоит в том, что буквы находятся в словах на различных позициях и это мешает нам просто сравнить строки. Поэтому упорядочим символы в строке, например, по возрастанию с помощью встроенной функции sort().
Теперь мы можем выполнить сравнение строк с помощью функции strcmp(), которая вернет нам 0 только в том случае, если строки идентичны. В таком случае и выводим «YES», а в противном случае «NO».
Код(строки c-string)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <algorithm> #include <iostream> #include <cstring> using namespace std; const short SIZE = 256; int main() { char *a = new char[SIZE]; char *b = new char[SIZE]; cin.getline(a, SIZE); cin.getline(b, SIZE); sort(a, a + strlen(a)); sort(b, b + strlen(b)); cout << (strcmp(a, b) == 0 ? "YES" : "NO"); return 0; } |
Решение 2
Решение аналогично, но нам не нужно теперь использовать функцию strcmp(), а мы просто сравниваем получившиеся строки, смотрим равны ли они, если да, то выводим «YES», а в противном случае «NO».
Код (строки string)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <algorithm> #include <iostream> #include <string> using namespace std; int main() { string a, b; cin >> a >> b; sort(a.begin(), a.end()); sort(b.begin(), b.end()); cout << (a == b ? "YES" : "NO"); return 0; } |
Тесты
Входные данные | Выходные данные |
sharm
marsh |
YES |
ananas
nnaass |
NO |
tommarvoloriddle iamlordvoldemort |
YES |
Задача взята отсюда.
Решенная задача на e-olymp.
Код на Ideone.com: c-string, string.
Молодец. Совершенно верное решение. Зачтено.