はじめに
アナグラムとは、別の単語または句の文字を並べ替えて作られた単語または句のことです。たとえば、「listen」は「silent」のアナグラムです。このチャレンジでは、2 つの文字列が互いにアナグラムであるかどうかをチェックする関数を書くように求められます。
文字列のアナグラム
2 つの文字列を引数として受け取り、それらが互いにアナグラムであれば True を返し、そうでなければ False を返す関数 is_anagram(s1, s2) を書きます。この関数は大文字小文字を区別せず、空白、句読点、特殊文字を無視する必要があります。
この問題を解くには、次の手順を辿ることができます。
str.isalnum()を使って半角英数字以外の文字をフィルタリングし、str.lower()を使って各文字を小文字に変換します。collections.Counterを使って各文字列の結果となる文字を数え、結果を比較します。
from collections import Counter
def is_anagram(s1, s2):
return Counter(
c.lower() for c in s1 if c.isalnum()
) == Counter(
c.lower() for c in s2 if c.isalnum()
)
is_anagram('#anagram', 'Nag a ram!') ## True
まとめ
このチャレンジでは、2 つの文字列が互いにアナグラムであるかどうかをチェックする方法を学びました。半角英数字以外の文字をフィルタリングするために str.isalnum() を使用し、各文字を小文字に変換するために str.lower() を使用し、各文字列の結果となる文字を数えて結果を比較するために collections.Counter を使用しました。