De data aceasta vom studia problema "Verify Anagrams" ("Verify Anagrams").
Am scris deja despre această problemă mai devreme. dar acum spune despre asta într-un mod ușor diferit.
Anagrama este un joc cu cuvinte, când, ca urmare a rearanjării literelor unui cuvânt sau unei fraze, primim un alt cuvânt sau o expresie. Două cuvinte sunt anagrame, dacă putem obține unul din celelalte, permițând scrisorile în loc. Sunt date două cuvinte sau fraze și sarcina dvs. este să verificați dacă acestea sunt anagrame.
Numără literele
Deci, trebuie să comparăm două fraze. Pentru a începe, trebuie să le "procesăm": selectați numai literele și traduceți-le în litere mici. De asemenea, în acest pas putem converti un șir într-un matrice. Vom efectua această procedură într-o funcție separată.
Sau, dacă economisiți memorie și preferați generatoare:
Sau ca un stil de programare funcțional:
Apoi, trebuie să numărăm fiecare literă în text și dacă caracteristicile cantitative ale cuvintelor / expresiilor verificate coincid, atunci ele sunt anagrame. Să presupunem că folosim numai litere în limba engleză. Apoi putem folosi o serie de 26 de elemente pentru a menține contul.
Sincer, arata ca un cod scris in C, dar nu in Python. În plus, suntem legați rigid de alfabetul englez. Să înlocuim lista cu un dicționar.
Deja mai bine, dar motto-ul binecunoscut al Python spune - "Bateriile sunt atașate". Și clasa Counter vă permite să numărați pur și simplu literele din text.
Cred că vă puteți vedea că funcția noastră separată count_letters nu este atât de necesară și soluția finală poate fi scrisă astfel:
Sortarea tot
Când am rezolvat prima dată această problemă, nu am folosit contoare. În schimb, am transformat textul într-un fel de aspect universal pentru permutări. Desigur, vorbesc despre o formă ordonată. Dacă sortim liniile și le comparăm, este în esență același lucru ca și numărarea elementelor matricei. Și, deoarece în sarcina noastră textul conține doar litere și spații, putem folosi un truc:
După cum puteți vedea, putem transforma această funcție într-o singură linie (pentru distracție) cu o mișcare de mână:
Iată o poveste despre anagrame.
Mulțumesc CheckiO pentru sarcina interesantă.