Перевірка анаграм

Перевірка анаграм

На цей раз будемо вивчати завдання «Перевірка анаграм» ( «Verify Anagrams»).

Ми вже писали про це завдання раніше. але тепер розповімо про неї трохи іншим способом.

Анаграма - це гра зі словами, коли в результаті перестановки літер слова або фрази отримуємо інше слово або фразу. Два слова є анаграма, якщо ми можемо отримати одне з іншого переставляючи букви місцями. Дано два слова або фрази, і ваше завдання - перевірити, чи є вони анаграмами.

вважаємо літери

Отже, нам потрібно порівняти дві фрази. Для початку нам потрібно їх «обробити»: вибрати тільки букви і перевести їх в нижній регістр. Також, на цьому кроці ми можемо перетворити рядок в масив. Винесемо цю процедуру в окрему функцію.

Або, якщо ви бережете пам'ять і вважаєте за краще генератори:

Або любите активний спосіб програмування:

Далі нам потрібно порахувати кожну букву в тексті, і, якщо кількісні характеристики перевіряються слів / фраз збігаються, то вони анаграми. Припустимо, що ми використовуємо тільки латинські букви. Тоді ми можемо використовувати масив з 26 елементів для ведення рахунку.

Чесно кажучи, це виглядає як код написаний на С, але ніяк не на Python. Крім того, ми прив'язані жорстко до англійської абетки. Давайте замінимо список на словник (dictionary).

Вже краще, але відомий девіз Python говорить - «Батарейки додаються». І клас Counter дає можливість просто підрахувати літери в тексті.

Думаю, ви й самі бачите, що наша окрема функція count_letters вже не так вже й потрібна, і підсумкове рішення можна записати так:

Сортуємо все підряд

Коли я вирішував перший раз це завдання, я не використовував лічильники. Замість цього я перетворював текст в якийсь універсальний вид для перестановок. Звичайно, я говорю про упорядкованому вигляді. Якщо ми відсортуємо рядки і порівняємо їх, то це по суті те ж саме, що вважати елементи масиву. І, так як в нашому завданні текст містить тільки літери і пропуски, то можна використовувати один трюк:

Як можна помітити, ми одним рухом руки можемо перетворити цю функцію в однострочнікі (забави заради):

Ось така от історія про анаграма.

Спасибі CheckiO за цікаву задачу.

Схожі статті