Ссылка на задачу на e-olymp.
Условие
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
Входные данные.
Два слова заданы в отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают $255$.
Выходные данные.
Следует вывести «$YES$», если введенные слова являются анаграммами друг друга и «$NO$» если нет.
Тесты
Входные данные | Выходные данные |
---|---|
sharm marsh |
YES |
ananas nnaass |
NO |
Код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Test { static function f (a : String, b:String) : String { var M = [], N = []; var count = 0; if (a.length != b.length) return 'NO'; for (i in 0...a.length) { M[i] = a.charAt(i); N[i] = b.charAt(i); } M.sort(function(a, b) { if(a <= b) return -1; else if(a > b) return 1; else return 0; }); N.sort(function(a, b) { if(a <= b) return -1; else if(a > b) return 1; else return 0; }); for (i in 0...a.length) { if(M[i] == N[i]) count++; } if (count == a.length) return 'YES'; return 'null'; } static function main() { var output = Sys.stdout(); var a:String = Std.parseString(Sys.stdin().readLine()); var b:String = Std.parseString(Sys.stdin().readLine()); output.writeString(f(a,b)); } } |
Решение.
Создадим функцию, которая будет проверять являются ли данные, полученные из двух строк, анаграммами. Вначале проверим, совпадает ли количество символов в строках, так как не имеет смысла выполнять дальнейшие действия если строки имеют разную длину.Если длины равны, то букву каждого слова запишем как отдельный символ соответствующего массива. После чего отсортируем массивы. После этого посимвольно сравним получившиеся массивы. Если i-ые символы совпадают, то увеличиваем счетчик на 1. Если значение счетчика, после окончания цикла будет равно длине строки, то слова являются анаграммами.
Ссылка на решение задачи на сайте Try Haxe!
Для отправки комментария необходимо войти на сайт.